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