相同的密鑰根據Java文檔weakhashmap:重新創建上WeakHashMap中
「這個類的對象主要是與主要對象,它們的equals方法測試使用==運算對象標識使用一旦這樣的密鑰將被丟棄它不能被重新創建,所以不可能在WeakHashMap中查找該密鑰「
這是否意味着如果我們使用objectA作爲弱哈希映射中條目0的鍵,並且稍後我們移除該條目testMapHashWeak.remove(objectA);
我們無法爲另一個條目使用相同的密鑰objectA
?因爲我做了一個小測試,我可以做到這一點:
public void test4WeakHashMap(WeakHashMap<B, String> testMapHashWeak) {
B objectB = new B();
String sTest = "hola";
System.out.println("1st time - key&value inserted ->"+objectB+","+sTest);
testMapHashWeak.put(objectB, sTest);
System.out.println("Get element 1st time-> "+testMapHashWeak.get(objectB));
testMapHashWeak.remove(objectB);
//Insert 2nd time
System.out.println("2st time - key&value inserted ->"+objectB+","+sTest);
testMapHashWeak.put(objectB, sTest);
System.out.println("Get element 2nd time-> "+testMapHashWeak.get(objectB));
}
作爲輸出:在句子
1st time - key&value inserted ->[email protected],hola
Get element 1st time-> hola
2st time - key&value inserted ->[email protected],hola
Get element 2nd time-> hola
你的陳述是正確的,但你的榜樣不是。問題是包含字符串常量'「key」'*的key1和key2是*相同的實例(使用斷言很好,運行帶有斷言的代碼更好)。 Java使用相同的對象實例來表示編譯時常量字符串。用'new String(「key」)替換其中的一個將會創建不同的String實例相同的期望情況。 – Holger
編輯代碼示例來建議修復。 – Holger
雖然原始代碼已損壞,但編輯被拒絕;我不明白原因,因爲我建議的修復保持了原意。但是:除了第一個斷言失敗之外,創建對象key3和key4之後的斷言肯定應該引用它們而不是key1和key2。看來,只有原始的海報纔有可能修復該代碼。 – Holger