本帖最后由 123_yaya 于 2014-6-8 16:41 编辑
这样分析对不对:
还是因为常量池的原因:
public static void main(String[] args) {
String str="abc";
String str1=new String("abc");
String str2="abc";
System.out.println(str==str1);//结果为false
System.out.println(str2==str);//结果为true
}
分析:第一个 str在栈中创建了一个引用,指向堆,堆里面存放了"abc".
str1因为是new String(),所以,在堆中新创建一块空间存放"abc",然后栈中的引用指向堆中的“abc",注意,这个"abc"和上面的”abc"是不一样的,str不等于str1的。
第三个str2发现了堆中已经存在了“abc",所以,栈中的引用直接指向第一个堆中的”abc",所以str2==str3。 |