Object默认是所有类的父类。
以上是Object自带的9个方法。下面我们来详细介绍下这几个方法:
equals :比较的是两个句柄引用的值是否是同一地址,返回true或false;
getClass :反射获取类信息;
hashCode :获取对象的散列码(哈希就是散列),散列代表无规则的分布,但是分布地相对均匀;通常用数组去实现散列,往数组里面无规律的放数据;
notify :唤醒一个线程,让线程进入就绪状态;
notifyAll :唤醒全部线程;
toString :默认的是输出所属对象的类信息以及对象的地址;
wait :让线程进入等待状态(未就绪状态);
有关equals方法:
Object 类中的 equals 方法用于检测一个对象是否等于另外一个对象。在 Object 类中,这
个方法将判断两个对象是否具有相同的引用。如果两个对象具有相同的引用, 它们一定是相
等的。
字符串对equals进行了重写,所以只对比字面意思。
getClass 方法将返回一个对象所属的类。
有关hashCode方法:
散列码( hash code ) 是由对象导出的一个整型值。散列码是没有规律的。如果 x 和 y 是两个不同的对象, x.hashCode( ) 与 y.hashCode( ) 基本上不会相同。可能会相等。
如果有两个不同的对象,他们的hasCode一定不相等?(不对,有一定概率相等。)
如果两个对象的hashCode不相等,那么这两个对象一定不相等,是两个独立的对象?(正确的。)
重写equals方法一定要重写hashCode方法。为什么?因为hashmap中需要用equals和hashCode进行协同工作,equals判断两个对象值是否相等,然后由根据hashcode存储。
String重写了equals让s和t地址相等,也伴随重写了hashCode(string类中不再根据地址计算散列码,而是根据字符串的具体内容导出),所以表5-2中s和t的散列码相等。
字符串 s 与 t 拥有相同的散列码, 这是因为字符串的散列码是由内容导出 的。而字符串缓冲 sb 与 tb却有着不同的散列码, 这是因为在 StringBuffer 类中没有定义 hashCode 方法,它的散列码是由 Object 类的默认 hashCode 方法导出的对象存储地址。