Я создаю 3 объекта одного класса: A, B, rB. Здесь rB относится к B. И значения A и B равны. У меня есть переопределенный метод equals, где я сравниваю значения.
Так
A.equals (B), A.equals (rB) и B.equals (rB) верно. Но A! = B, A! =
рБ и В == рБ.
Теперь я помещаю A, B, rB в HashMap, скажем, hm, и IdentityHashMap, скажем, ihm.
hm.put(A, "1");
hm.put(B, "2");
hm.put(rB, "3");
ihm.put(A, "1");
ihm.put(B, "2");
ihm.put(rB, "3");
Так как я не храню ноль, поэтому hm.get(A)
должен возвращать 3, hm.get(B)
должен возвращать 3 и hm.get(rB)
должен возвращать 3.
Точно так же ihm.get(A)
должен вернуть 1, ihm.get(B)
должен вернуть 3 и ihm.get(rB)
должен вернуть 3.
Согласно документам Java, IdentityHashMap выполняет k1 == k2, в то время как HashMap выполняет k1.equals (k2), если k1 и k2 не равны нулю.
Так почему hm.get(A)
возвращает 1.