美文网首页
jdk阅读一:object

jdk阅读一:object

作者: 陆阳226 | 来源:发表于2021-05-11 23:47 被阅读0次

    概要

    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

          本文链接:https://www.haomeiwen.com/subject/lfjodltx.html