Java Object 类核心方法解析
构造方法
Java Object 类提供了一个默认的无参构造方法,用于在创建对象实例时进行初始化。通过 new 关键字调用此构造器来实例化对象。
public Object() {
// 默认构造器,用于实例化对象
}
registerNatives 方法
这是一个私有的静态本地方法,用于注册本地(native)方法。它在类加载时通过静态代码块进行调用,确保本地方法的可用性。
private static native void registerNatives();
static {
registerNatives();
}
getClass 方法
getClass 方法被声明为 final,因此不能被子类重写。它返回表示对象运行时类的 Class 对象。通过这个 Class 对象,可以获取关于该类的详细信息,如其属性和方法。
public final native Class> getClass();
需要注意的是,Class 对象代表编译时类信息,而 getClass() 方法返回的是运行时类信息。
hashCode 方法
hashCode 是一个本地方法,它返回对象的散列码(一个 int 值)。散列算法用于根据特定规则将数据映射到一个地址。在集合类(如 HashMap)中,hashCode 用于快速定位元素的存储位置。
- 当向集合添加新元素时,会首先调用其
hashCode方法来确定潜在的存储位置。 - 如果该位置为空,元素直接存储。
- 如果该位置已有元素,则会调用
equals方法进行比较。若不相等(发生哈希冲突),则会将具有相同哈希码的对象存储在同一位置的链表中。
重要约定: 如果两个对象的 equals() 方法返回 true,那么它们的 hashCode() 方法必须返回相同的整数值。反之,如果 hashCode() 值相同,equals() 值不一定相同。
public native int hashCode();
equals 方法
equals 方法用于比较两个对象是否相等。在 Object 类中,默认的 equals 实现比较的是对象的引用地址,即判断两个变量是否指向同一个对象。
public boolean equals(Object obj) {
return (this == obj);
}
通常情况下,我们会重写 equals 方法来根据对象的实际内容进行比较。
重写 equals 方法时,必须遵循以下通用约定:
- 自反性: 对于任何非空引用
x,x.equals(x)必须返回true。 - 对称性: 对于任何非空引用
x和y,如果x.equals(y)返回true,那么y.equals(x)也必须返回true。 - 传递性: 对于任何非空引用
x,y, 和z,如果x.equals(y)返回true,并且y.equals(z)返回true,那么x.equals(z)也必须返回true。 - 一致性: 对于任何非空引用
x和y,多次调用x.equals(y)必须持续返回相同的结果(true或false)。 - 对于任何非空引用
x,x.equals(null)必须返回false。