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