public class Test {
public static void main(String[] args) {
String x = "1";
String y = "";
String a = x + y;
String b = x + y;
String c = "1" + "";
String d = "1" + "";
System.out.println(a == b);
System.out.println(a == c);
System.out.println(c == d);
System.out.println(x == c);
}
}
上述代码运行结果:
false false true true原因:
String c = "1" + "";
String d = "1" + "";
这两名代码不会通过new来创建对象,编译器在编译时会自动优化String c = "1";String d = "1";
而且发现内存中已经存在了字符串常量"1",所以直接指向该常量,从而不创建新的对象,所以x,c,d这3个是同一个对象
x,a,b,c,d这四个对象使用equals()方法比较时都是相等的.
原文:http://my.oschina.net/lhplj/blog/403958