波涛 发表于 2014-5-31 01:08
String a = "abc";
String b = new String("abc");
System.out.println(a == b); //false 因为a不在堆内存 ...
我感觉你的解释有问题。
其实,String a = "abc"; 和 String b = new String("abc"); 都是创建了String对象,都是在堆内存中,只有引用变量a和b是在栈内存中。只是他们在堆内存中,分别开辟了一块内存,他们的地址是不一样的,所以a==b是false;而他们的值是一样的,所以用equals比较是true。
这个跟数组的创建有点类似,数组也有两种创建方式:
int[] i1 = new int[3]; //如果将数组的各个值赋成这样:1,2,3
int[] i2 = {1,2,3};
上面两个数组的比较:i1==i2 (false)
i1[0] == i2[0] (true)
i1[1] == i2[1] (true)
i1[2] == i2[2] (true) |