即使你在将对象作为Key放入hashmap之前计算对象的哈希值时仍然覆盖,它仍然引用Object类中的hashcode方法并给出一些int值。
我已经覆盖了一个方法,该方法只返回所有对象的相同值来测试哈希码,但是每次获取值的形式都是Object类的哈希码方法,这是用母语实现的。
如果它没有从用户定义的类执行重写哈希码方法那么实现哈希码的目的是什么?
public class Product {
public String name ;
public int id;
public int hashcode(){ int result = 1; return result; }
}
理想情况下,所有产品对象的哈希码都是1,但我得到像952115109这样的东西 540724846 ... 这是为什么?
答案 0 :(得分:6)
public int hashcode(){ ... }
必须是
public int hashCode(){ ... }
请注意,Java中的标识符区分大小写。
要避免此类错误,请使用@Override
注释:
@Override
public int hashcode(){
...
}
会产生编译时错误,因为超类中没有hashcode()
方法。
答案 1 :(得分:2)
hashCode
而非hashcode
,Java方法区分大小写。
我建议您使用@Override
,因为当您遇到这样的拼写错误时,IDE会告诉您。
答案 2 :(得分:1)
您已将hashcode()
的所有字母都写成小写,但应该是hashCode()
java中的变量和方法区分大小写。
public int hashCode()
是在Object类中声明的方法。
你并没有真正覆盖Object类的hashCode()
。您添加了新方法hashcode()
而不是覆盖。