public class Test {
public static void main(String[] args) {
String str1 = "abc";
String str2 = "abc";
String str3 = new String("abc");
String str4 = new String("abc");
System.out.println(str1 == str2);
System.out.println(str3 == str4);
System.out.println(str1 == str3);
}
}
// output
true
false
false
语句11的结果说明str1和str2引用了同一个实例。
语句5会在栈中创建一个对象引用变量str1,然后查找栈中是否存在“abc”,如果没有,则将“abc”存放到栈中,并将引用变量str1指向它;如果已经存在“abc”,则直接令引用变量str1指向它。测试结果说明了这点。这样充分利用了栈的数据共享优点,减少了资源的消耗;而new()方法则创建新对象,将新对象放置堆中,并将引用变量指向它。