Object详解
Object类中的常用方法分别是:getClass() ; hashCode() ; equals(Object); toString(); notify(); notityAll(); wait(long); wait(long,int); wait(); finalize();
他们分别的作用如下:
1. getClass() :获取该对象的类类型,其返回类型为Class<?>类,常用语Java反射机制。
2.hashCode() : 返回对象的哈希码值,哈希码存在的好处很多,有查找的快捷性,例如HashMap或HashTable等均采用key的hashCode来确定其对象的存储位置;判断对象是否相同,如果两个对象相等,那么这两个对象计算出的哈希值也要相等,实际使用场景中我们采用equals来判断对象是否相等,如果我们自定义的类中重新写了equals方法,则也要同时重写掉hashCode方法。
另外,上面说的一句话:如果两个对象相等,则这两个对象的哈希值一定相等,这句话反过来说则不一定成立,如果两个对象的哈希值相等,那么这两个对象不一定相等。
3.equals(Object):用于比较两个对象是否相等。在Object中的equals方法的判断,仅当被比较的对象所指向的实例为同一个,即返回地址相同,则equals返回true,否则返回false。看过源码可以知道,这个比较实际上也就是object1==object2,和“==”达到的效果一样,但在实际场景中,很多类会根据实际需要去重写该方法,如常见的String便重写了该方法,切记如果重写了euqals方法,hashCode()方法也要一起重写。
4.clone() : 复制一个对象,官方注释中,给出了一个说明:x.clone() != x 返回true;x.clone().getClass() == x.getClass() 返回true,但不是一定的;x.clone().equals(x) 返回true,但不是一定的;根据实际场景需要,我们可以重写clone()方法,但要需要实现Cloneable接口;另外,Object.clone()方法属于浅层复制,实际运用时一定要注意。
这里同时引申出了深层复制和浅层复制的概念。
5.toString() : Object中默认输出是类名@hashcode值。实际应用场景中,可根据实际情况确定是否需要重写该方法,可以对对象进行自定义的格式输出。
6.notify() :唤醒正在等待该对象锁的一个线程。
7.notifyAll() :唤醒正在等待该对象锁的所有进行。
8.wait() : 释放当前线程中该对象的对象锁,进入对象等待池,等待被唤醒;
注: notify()、notifyAll()、wait()方法需要在synchronized代码块中使用。