public class mainB {
public mainB(){
System.out.println("java".hashCode());
}
@Override
public int hashCode() {
return 4;
}
public static void main(String[] args){
new mainB();
}
}
我覆盖了hashCode 方法,但是当我运行应用时,它没有显示4 。有什么问题?
答案 0 :(得分:4)
你只是做错了。 "java".hashCode()
只获取String
对象的哈希码。如果您想获得正确的哈希码:
1)覆盖hashCode
方法。
2)使用overriden方法创建类的实例。
3)致电hashCode
。
诚实地覆盖hashCode
可能是危险的,导致效率下降。这就是为什么如果你不确定你做得对,你就不应该覆盖它。当您不确定时,最好的方法是始终在IDE(例如Eclipse)中生成它,这样可以正确地完成它。
答案 1 :(得分:4)
您正在覆盖mainB
哈希码功能,但在使用String
时使用了"java".hashcode()
哈希码。
要使用您的功能,您应该:
new mainB().hashcode()
答案 2 :(得分:1)
您已为课程hashCode()
定义了mainB
方法。因此,当您创建此类的对象并调用hashCode()
时,您将得到4个:
mainB myObject = new mainB();
System.out.println(" HashCode = " + myObject.hashCode());
当你写下以下内容时:
System.out.println("java".hashCode());
您正在hashCode()
实例上调用String
方法。
答案 3 :(得分:0)
改变这个:
public mainB(){
System.out.println(this.hashCode());
}
答案 4 :(得分:0)
您正在显示包含单词"java"
的字符串哈希码。
将您的实施更改为
System.out.println(hashCode());
将调用您的hashCode()
。