【发布时间】:2018-03-08 12:06:48
【问题描述】:
我试图理解 Java 对象的 hashCode() 并看到 Java 对象的 hashCode() 方法的以下代码:
package java.lang;
public class Object {
// Some more code
public native int hashCode();
// Some other code
}
现在,我们知道,如果我们创建一个类,它会隐式扩展 Object 类,为此我编写了一个示例:
package com.example.entity;
public class FirstClass {
private int id;
private String name;
// getters and setters
}
因此,这个类即:FirstClass 将隐式扩展 Object 类。
主类:
package com.example.app.main;
import com.example.entity.FirstClass;
public class MainApp {
public static void main(String[] args) {
FirstClass fs = new FirstClass();
fs.setId(1);
fs.setName("TEST");
System.out.println("The hasCode for object fs is " + fs.hashCode());
}
}
由于FirstClass 隐式扩展Object 类,因此它将具有Object 类的hashCode() 方法。
我在FirstClass 对象上调用了hashCode(),并且由于我没有覆盖hashCode(),理论上它应该调用Object 类的hashCode()。
我的疑问是:
由于 Object 类没有任何实现,它如何计算任何对象的哈希码?
就我而言,当我运行程序时,它返回的哈希码是 366712642。
谁能帮我理解这个?
【问题讨论】:
-
是什么让你认为Java的
object类没有实现hashCode? -
它有
native修饰符,这意味着它最有可能在 C 或 C++ 中实现,并且这些本地方法随 JDK 一起提供。 stackoverflow.com/questions/18900736/…。注意 Native 和 abstract 方法是不一样的! -
@Neijwiert:是的,我对此并不完全了解,这就是我问这个问题的原因。由于我只看到方法声明(没有正文),我怀疑它如何仍然能够获得值。