【发布时间】:2015-06-14 15:36:07
【问题描述】:
import java.util.HashMap;
import java.util.Map;
public class TestClass {
@Override
public boolean equals(Object obj) {
return false;
}
@Override
public int hashCode() {
return 1;
}
public static void main(String[] args) {
HashMap<TestClass, Integer> hm = new HashMap<TestClass, Integer>();
hm.put(new TestClass(), 1);
hm.put(new TestClass(), 2);
hm.put(new TestClass(), 3);
for (Map.Entry<TestClass, Integer> m : hm.entrySet()) {
System.out.println(m.getKey() + " " + m.getValue());
}
}
}
我在我的TestClass中重写了hashcode,但是在调试时我发现它正在调用String的hashcode方法而不是调用我的重写方法
【问题讨论】:
-
String 是最终类。不能覆盖 String 的 hashcode 方法
-
调试时你在哪一行接到电话?
-
您正在覆盖
Object class's hashCode方法,而不是 String 类! -
我运行了你的代码,每个键都被打印为 packagename.TestClass@1,这意味着你的 hashCode,总是返回 1,被确定使用。是什么让你觉得 String 的 hashCode 被使用了?
-
没有
String参与此代码,它完美地发挥了它的作用;)