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

4

5 回答 5

4

你只是做错了。"java".hashCode()简单地获取String对象的哈希码。如果您想获得正确的哈希码:

1)覆盖hashCode方法。

2) 使用重写的方法创建类的实例

3) 呼叫hashCode

诚实地压倒一切hashCode可能是危险的,并导致效率下降。这就是为什么如果您不确定自己是否正确,则不应覆盖它。当您不确定时,最好的方法是始终在您的 IDE(例如 Eclipse)中生成它,这样才能正确完成。

于 2012-09-05T09:17:00.223 回答
4

您正在覆盖mainBhashcode 函数,但String在使用"java".hashcode().

要使用您的功能,您应该这样做:

new mainB().hashcode()
于 2012-09-05T09:17:29.227 回答
1

您已经为 class 定义hashCode()了方法mainB。因此,当您创建此类的对象并调用hashCode()时,您将获得 4 个类似:

mainB myObject = new mainB();
System.out.println(" HashCode = " + myObject.hashCode());

当您编写以下内容时:

System.out.println("java".hashCode());

您正在实例hashCode()上调用方法。String

于 2012-09-05T09:17:57.353 回答
0

您正在显示包含 word 的字符串的哈希码"java"。将您的实现更改为

System.out.println(hashCode());

hashCode()会被召唤。

于 2012-09-05T09:18:26.433 回答
0

改变这个:

public mainB(){
        System.out.println(this.hashCode());
    }
于 2012-09-05T09:17:16.403 回答