字符串pool 引用相加和字面量相加
public static final String AB = "ab";
public static final String C = "c";
public static void main(String[] args) {
String s1 = "abc";
String s2 = "ab";
String s3 = "c";
System.out.println(s1 == (s2+s3));
System.out.println(s1 == (AB+C));
System.out.println(s1 == ("ab"+"c"));
}
开始我以为三个都是输出 true,然而,运行后却是
false
true
true
第十行所比较的不是同一个内存指向!
找了些资料,原来字符串在做“+”操作,
如果是字面量(“abc”这样,或者static final 修饰的字符串)那“+”号两边比较的字符串都是pool中的字符串;
如果“+”两边有一边不是字面量,那比较的字符串一个是pool中的一个是堆中的,这样比较内存指向的话,显然是false了