为什么Object.hashCode()没有为看似相同的对象返回相同的值

Pat*_*ati -2 java object hashcode

代码如下:

public class Main {
    public static void main(String[] args) {
        Student a = new Student(10, "Ole");
        Student b = new Student(10, "Ole");

        System.out.println(a.hashCode());
        System.out.println(b.hashCode());
    }
}
Run Code Online (Sandbox Code Playgroud)

对象看起来像这样:

public class Student {
    private int snr;
    private String namn;

    public Student(int snr, String namn) {
        this.snr = snr;
        this.namn = namn;
    }
}
Run Code Online (Sandbox Code Playgroud)

这些是运行代码时的结果:

57651960
441366923
Run Code Online (Sandbox Code Playgroud)

我已经阅读了一些javadoc,但我找不到原因,有人可以解释为什么会这样吗?还有什么我必须做的才能使结果相同?(如果可能的话)

谢谢你的解释:)!现在有道理;)

rob*_*oia 6

你没有覆盖Object.hashCode(),所以它返回一个基于对象标识的值.

文档:

尽可能合理,Object类定义的hashCode方法确实为不同的对象返回不同的整数.(这通常通过将对象的内部地址转换为整数来实现,但JavaTM编程语言不需要此实现技术.)