String a = "abc" 與String b = new String("abc")的區別

sunjiaminaini發表於2017-08-08

假如我們,
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)判斷是否相等,並且區分大小寫。

相關文章