Java中String是否为字符序列?及equals方法比较问题解惑
关于Java中String的两个问题解答
1. String是否属于字符序列?
当然算!在Java里,String类直接实现了CharSequence接口,而CharSequence就是Java定义的字符序列的抽象表示。除了String,StringBuilder、StringBuffer这些常用的类也都实现了这个接口,它们都属于字符序列的范畴。
2. 为什么String s1 = "a"; System.out.println(s1.equals('a'));返回False?
这个问题的核心在于Java中equals()方法的匹配逻辑,尤其是String类的equals()实现规则:
- 首先,
String的equals()方法会先判断传入的参数是不是String类型(通过instanceof检查),如果不是,直接返回false。 - 你这里传入的是char类型的'a',在调用
equals()时,Java会自动把它装箱成Character对象——而Character和String是完全不同的类型,所以第一步类型检查就不通过,直接返回false。
咱们可以看一下String.equals()的核心源码片段(简化后):
public boolean equals(Object anObject) { if (this == anObject) { return true; } // 关键:先判断参数是否为String类型 if (anObject instanceof String) { String anotherString = (String)anObject; // 后续才会比较字符内容 int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } // 非String类型直接返回false return false; }
如果想要得到true的结果,你可以这样修改:
- 把char转成String:
s1.equals("a") - 或者把String的字符取出来和char比较:
s1.charAt(0) == 'a'
内容的提问来源于stack exchange,提问作者Aashit Garodia
相关产品推荐
相关产品推荐

