Java重写hashCode不会';不起作用

Java重写hashCode不会';不起作用,java,overriding,hashcode,Java,Overriding,Hashcode,我正在重写hashCode方法,但是当我运行app时,它不会显示4。有什么问题吗?你只是做错了“java”。hashCode()只获取字符串对象的哈希代码。如果要获取正确的哈希代码: 1) 重写hashCode方法 2) 使用重写的方法创建类的实例 3) 调用hashCode 诚实地重写hashCode可能是危险的,并导致效率降低。这就是为什么如果你不确定自己做得对,就不应该覆盖它。当您不确定最好的方法是始终在IDE(例如Eclipse)中生成它,这样可以正确地执行此操作。更改此选项: publ

我正在重写hashCode方法,但是当我运行app时,它不会显示4。有什么问题吗?

你只是做错了<代码>“java”。hashCode()只获取
字符串
对象的哈希代码。如果要获取正确的哈希代码:

1) 重写
hashCode
方法

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

3) 调用
hashCode

诚实地重写hashCode可能是危险的,并导致效率降低。这就是为什么如果你不确定自己做得对,就不应该覆盖它。当您不确定最好的方法是始终在IDE(例如Eclipse)中生成它,这样可以正确地执行此操作。

更改此选项:

public class mainB {
    public mainB(){
        System.out.println("java".hashCode());
    }

    @Override
    public int hashCode() {
        return 4;
    }

    public static void main(String[] args){
        new  mainB();
    }
}

您正在重写
mainB
hashcode函数,但在使用
“java.hashcode()
时使用了
String
hashcode-one

要使用您的功能,您应该执行以下操作:

public mainB(){
        System.out.println(this.hashCode());
    }

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

new mainB().hashcode()
当你写以下内容时:

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

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

您正在显示包含单词
“java”
的字符串的哈希代码。 将您的实现更改为

System.out.println(hashCode())


您的
hashCode()
也会被调用。

而且“java”是临时的,然后会被垃圾收集,所以您不能再次使用它,对吗?@tuğrulbüyükıkık Well String hashCode在组成字符串的字符上应该是一致的。所以你也会有同样的感觉。
System.out.println("java".hashCode());