Object类分析
Object类的 11 个方法
最常用的三个方法
boolean equals(Object obj) // 指示其他某个对象是否与此对象“相等”
int hashCode() // 返回该对象的哈希码值
String toString() // 返回该对象的字符串表示
关于线程的五个方法
void notify() // 唤醒在此对象监视器上等待的单个线程
void notifyAll() // 唤醒在此对象监视器上等待的所有线程
void wait() // 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待
void wait(long timeout) // 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,
// 或者超过指定的时间量前,导致当前线程等待
void wait(long timeout, int nanos) // 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,
// 或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待
其他三个方法
Class getClass() // 返回此 Object 的运行时类。
protected Object clone() // 创建并返回此对象的一个副本。
protected void finalize() // 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
equals和hashCode方法的重要性
- HashSet集合添加元素的原则:equals返回false且hashCode返回值不同。
什么时候都应该保证hashCode和equals的一致性。
…… - TreeSet集合添加元素的原则:compareTo返回非0即可。
但是,重写的equals方法应该与compareTo(Object obj)方法有一致的结果,其规则是——如果两个对象通过compareTo方法比较结果为0,则equals应该返回true。因为compareTo返回0时,则不添加元素,若此时equals返回false,这就与Set集合添加元素的规则产生冲突。
一个例子
比如根据ID区分雇员,则需要重写equals和hashCode方法。