jdk源码解读-Object


1. 为什么lang包下的不需要导包

编译器会自动导入lang包下的类

2. registerNatives()

注册本地方法、native方法

3. getClass()

返回此 Object 的运行时类、native方法。这里返回运行时类的怎么理解呢,可以对比另一个 类名.class 来探究。

public class Parent {}

public class Son extends Parent{}


public void testClass(){
    Parent p = new Son();
    System.out.println(p.getClass());//输出结果:Class com.test.Son
    System.out.println(Parent.class);//输出结果:Class com.test.Parent
}

类名.class返回的是编译时就可知的类对象,而getClass是一个方法,是在程序运行过程中,获取该类的实际运行类对象

4. hashCode()和equals()

hashCode方法是返回对象的hashcode int值,是一个native方法;equals方法判断两个对象是否相等,equals方法的源码就是通过 == 来比较对象大小。

有三点需要注意:

  1. 对于hashcode方法,有一个常用约定:相等对象(equals调用结果为true)的两个对象,其hashcode的返回值必定相等;不相等的两个对象,对其调用hashcode方法,返回值也可能相等(跟hash冲突原理一样)。也因为这个约定,一般重写了equals方法都需要重写hashcode方法。
  2. 对于任何非空引用值 x.equals(null) 都应返回 false
  3. == 和 equals的区别。== 是java的操作符,返回一个boolean值,当基本类型使用 == 时,直接比较存储的值是否相等,当引用类型变量使用 == 时,比较的是引用类型变量的指针,当 == 两边指向的是同一对象才相等;object类的equals方法直接使用==,因此如果没有重写equals方法时,equals和 == 一样,比较的是引用类型变量指针的地址是否相等,对于像StringDate这种重写了equals方法的类,比较的是指向对象的内容。

5. clone()

返回一个该对象的拷贝对象。native方法

  1. clone是浅拷贝,所谓浅拷贝是拷贝该对象的值,对于基本数据类型拷贝的就是值,对于引用类型拷贝的是指针值(指向的对象的地址),也就是说拷贝对象和被拷贝对象里面的引用类型指向的还是同一个。
    在这里插入图片描述
    在这里插入图片描述
    相对于的深拷贝就是连同拷贝对象里面的引用类型也拷贝了一份新的对象,实现深拷贝可以有两种方式:里面的对象也实现CloneAble接口(不推荐);所有需要拷贝的类都实现序列化接口Serializable

  2. 需要拷贝的对象要实现CloneAble接口,如果不实现该接口,就会抛出CloneNotSupportedExceptionCloneAble接口是一个空接口,仅又来标记可以clone,实际的拷贝还是通过Object类实现的。

6. toString()

        return getClass().getName() + "@" + Integer.toHexString(hashCode());

7. finalize()

垃圾回收时调用此方法,此方法一个对象只会执行一次。

8. wait()/notify()/notifyAll()

多线程通信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值