2 回答

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊
的鍵必須是唯一的。Map
因此,通過執(zhí)行 ,因?yàn)槟谔鎿Q與鍵 關(guān)聯(lián)的先前值。該方法檢查密鑰,如果實(shí)現(xiàn)是a,它將首先查找密鑰,然后再確認(rèn)等效性。m1.put(B, "anything");
B = "A"
"A"
equals()
HashMap
hashcode()
還有一些需要注意的事情,與此無關(guān)。Java嘗試對包含相同內(nèi)容的字符串進(jìn)行重復(fù)數(shù)據(jù)刪除(因?yàn)閍是不可變的,因此可以安全地執(zhí)行此操作)。因此,很可能并且實(shí)際上也會(huì)指向同一對象(盡管這取決于JVM)。Map
String
String A = "A"
String B = "A"
String C = new String("A");
將強(qiáng)制它創(chuàng)建一個(gè)新對象,盡管最新的垃圾回收器也會(huì)對此進(jìn)行重復(fù)數(shù)據(jù)刪除,盡管它將是一個(gè)不同的包裝器對象,但內(nèi)部的緩沖區(qū)將被替換,以便它與其他對象相同。String

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊
Java 字符串是不可變的,字符串的行為無法更改。每次進(jìn)行任何更改時(shí),它都會(huì)創(chuàng)建新的 String,而不是更新值。因此,此處的值“A”對于所有 String 對象都是相同的,對于所有三個(gè)對象,哈希代碼也是相同的。哈希圖中的所有三個(gè)值都指向相同的哈希代碼。
添加回答
舉報(bào)