Object:所有类的超类

Object默认是所有类的父类。

 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存储。

Object:所有类的超类

String重写了equals让s和t地址相等,也伴随重写了hashCode(string类中不再根据地址计算散列码,而是根据字符串的具体内容导出),所以表5-2中s和t的散列码相等。

字符串 s 与 t 拥有相同的散列码, 这是因为字符串的散列码是由内容导出 的。而字符串缓冲 sb 与 tb却有着不同的散列码, 这是因为在 StringBuffer 类中没有定义 hashCode 方法,它的散列码是由 Object 类的默认 hashCode 方法导出的对象存储地址。

 

上一篇:SpringBoot -jar 启动引入外部配置文件


下一篇:springboot项目部署之后如何读取到Resource(ClassPath)下的资源