所以我讀過,如果你這樣寫:比較字符串
String a="foo";
String b="foo";
System.out.println(a==b);
它會打印「真」,因爲第一個實施檢查存儲池尋找「 foo「,它無法找到它,因此它會創建一個新對象並將foo放入內存池中,然後每個其他字符串都將指向同一個對象。
,如果你寫:
String a="foo";
String b=new String("foo");
System.out.println(a==b);
它會打印出「假」,因爲你強制創建爲B A新的對象,因此它不會把它從池。
我的問題是,如果你這樣寫:
String a=new String("foo");
String b="foo";
System.out.println(a==b);
爲何仍打印「假」?我的意思是「a」創建一個新的對象,不會查找內存池,但是b應該查看內存池並找到創建的對象「a」並指向它。我在這裏錯過了什麼? 謝謝。
一個不在記憶池,因此a和b都指向DIF引用.... –
'字符串一個新=字符串( 「富」);'創建2個對象。首先創建'「foo」',然後用'new String'創建另一個。 – marstran
這很容易,我們有一個字符串池用於字符串的目的,和對象的對象池,您不能比較字符串池中的字符串與對象池中的字符串對象使用==直接 – PSo