本文已参与「新人创作礼」活动,一起开启掘金创作之路。
-
hashCode:根据哈希规则将对象的内存地址转换为一个哈希码。
-
equals:判断两个对象是否一致,比较地址,需保证equals方法相同的对象对应hashCode也相同。
为什么重写equals时被要求重写hashCode() ?
只重写equals方法而不重写hashcode方法,一是不符合约定;二是无法正常使用Map、Set。
java编程约定:如果两个对象根据equals方法比较是相等的,那么这两个对象的hashcode方法返回的hash值也一定是相等的。没有重写前equals方法中通过“==”比较两个对象的地址判断对象是否相同,hashcode方法返回对象的地址映射的hash值,符合此约定。
使用Map、Set等集合类型时:若重写equals方法判断对象的属性值来判断对象是否相等,但集合中是使用hashcode获得hash值来确定对象下标,若hash值冲突再使用equals方法判断对象是否相等,未重写的hashcode方法依然使用对象地址来映射一个hash值,这会使得我们认为相等的两个对象同时出现在集合中。
-
toString: 用字符串表示该对象
-
clone:浅拷贝一个对象,克隆对象自身的基本类型变量的值和引用变量的引用地址,使用它需要实现接口
Cloneable;深克隆:除了复制对象自身的基本类型变量的值,还要复制引用类型变量指向的实例对象。
(1)在浅克隆的基础上,重写clone()方法,将类中的引用类型也实现Cloneable接口并使用clone()方法将引用变量指向的实例也克隆一份。
(2)将对象进行序列化和反序列化,要求类实现Serializable接口。且引用类型变量对应的类也必须可序列化(无Trasient修饰),否则会报错。
-
wait:会使线程阻塞、让出CPU,同时会释放锁;当前线程必须拥有对象的锁才可调用该方法;必须调用
notify/notifyAll方法唤醒,(notify是随机唤醒)。