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实例,则比较两个字符串是否相同。

 

 

 

  

 

posted @ 2017-04-14 17:53  Coder_Dalu  阅读(79)  评论(0)    收藏  举报