jdk阅读一:object

概要

Object类是所有类的父类,所有对象、数组都实现了此类的方法。

源码

registerNatives():

private static native void registerNatives();
static {
    registerNatives();
}
  • native方法:没有方法体,方法的实现是C或C++编写的,简而言就是java中声明的可调用的使用C/C++实现的方法

  • Object类是所有类的父类,是最新初始化的类,在初始化时会执行上面的静态域和方法,registerNatives()用于将java的native方法与C/C++函数关联起来

getclass():

@HotSpotIntrinsicCandidate
public final native Class getClass();
  • 返回对象的运行时类,即Class对象
  • @HotSpotIntrinsicCandidate注解:Java 9引入的新特性,JDK的源码中,被@HotSpotIntrinsicCandidate标注的方法,在HotSpot中都有一套高效的实现,该高效实现基于CPU指令,运行时,HotSpot维护的高效实现会替代JDK的源码实现,从而获得更高的效率。
  • final方法:final修饰的方法不能被子类重写
    • final修饰符的其他作用:1. 修饰的类不能被继承 2. 修饰的变量不能被修改:基本类型值不能被修改,引用类型不能指向其他对象(其指向的对象本身可修改)

hashcode():

@HotSpotIntrinsicCandidate
public native int hashCode();

返回对象的hash码,哈希码主要用于哈希表数据结构,例如hashmap

  • 在程序执行期间,同一个对象多次调用,必须返回相同的数值,两次不同的程序执行期间不必返回相同的值
  • 如果equals方法返回相同,则两个对象必须返回相同的hash值
  • 如果equals方法返回不同,两个对象hash值可以是相同的,不同的对象返回不同的hash值可以提高哈希表的性能

equals()

public boolean equals(Object obj) {
    return (this == obj);
}

equals方法默认比较对象的引用,即判断是否是同一个对象。如果需要比较对象字段的值需要重写equals方法,同时也必须重写hashcode方法

clone():

@HotSpotIntrinsicCandidate
protected native Object clone() throws CloneNotSupportedException;

你可能感兴趣的:(jdk阅读一:object)