假如我们,
String a = “abc”; “abc”存在字符串常量池中
String b = “abc”;
if(a == b){} //这里 == 判断的是a b 是否指向”abc”这个字符内存池,在堆区里面的一块相同地址!
——-假如我们这样做——-
String a = “abc”;
String b = “ab” + “c”;
if(a == b){} //这里也是相等的,因为只有b赋值一刻被赋给那块内存,假如存在!
那么我们这样呢?
String a = “abc”;
String b = “ab”;
b = b+”c”;
if(a == b){} //这里就不相等了!!!
=======================new=======================
String a = new String(“abc”); 存在堆区
new的话就不可能进入sting pool了,先在栈区创建一个a指针,在堆区创建一块新的内存区指向它。
用 == 判断就不可能相等了!!因为不是在string pool里面是否有相同的一块地址!
String a = new Stirng(“abc”);
String b = new Stirng(“abc”);
if(a == b){} //这里就不可能相等了!!!因为new了两块地址嘛~~~~~~~
但可以用a.equals(b)判断是否相等,并且区分大小写。