String str1 = "hello";
String str2 = "hel" + new String("lo");
String str3 = "hel";
String str4 = "lo";
String str34 = str3 + str4;
String str5 = "hel" + "lo";
System.out.println(str1 == str2);
System.out.println(str1 == str34);
System.out.println(str1 == str5);
上述程序运行结果为:
false
false
true
说明: 当使用new时直接在堆中分配内存,str1是从字符串常量池中取出的,因此str1 == str2为false;str34 = str3 + str4先从字符串常量池中复制出str3和str4到堆中,在到堆中构造出str34;因此str1 == str34结果为false;str5 = "hel" + "lo"在编译时已知结果,str5为引用字符串常量池中的对象,所以str1 == str5结果为true