Java重写hashCode不显示效果

时间:2012-09-05 09:15:24

标签: java override hashcode

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 。有什么问题?

5 个答案:

答案 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()