String常量池
先来看题目:
String s1 = "ab";
String s2 = new String("ab");
String s3 = "a" + new String("b");
String s4 = "a" + "b";
System.out.println(s1==s2);
System.out.println(s1==s3);
System.out.println(s1==s4);
输出结果为:
false
false
true
首先s1和s4相等,毫无疑问,
如果使用equals()方法比较s1,s2,s3,s4时,是相等的。jdk1.8 中,String.equals()方法的源码如下:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
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;
}
}
return false;
}
如果引用指向同一个对象,则直接返回true;如果比较的引用对象是String实例,则比较两个字符串是否相同。

浙公网安备 33010602011771号