Object类说明

 

1.clone()函数的用途是用来另存一个当前存在的对象。

2.hashCode()

    方法返回散列码值,散列码是由对象导出的一个整数值。

    在Object中有一个hashCode方法来得到散列码。基本上,每一个对象都有一个默认的散列码,其值就是对象的内存地址。

   我们可以重写这个方法。

 

3.toString()方法一般都是需要重写的,返回一个String对象,用来标识自己。

 

 

4.equals()与hashcode()的关系

 

 

equals(Object obj)方法用来判断两个对象是否“相同”,如果“相同”则返回true,否则返回false。
hashcode()方法返回一个int数,在Object类中的默认实现是“将该对象的内部地址转换成一个整数返回”。
 
关于这两个方法的重要规范:
规范1:若重写equals(Object obj)方法,有必要重写hashcode()方法,确保通过equals(Object obj)方法判断结果为true的两个对象具备相等的hashcode()返回值。说得简单点就是:“如果两个对象相同,那么他们的hashcode应该 相等”。不过请注意:这个只是规范,如果你非要写一个类让equals(Object obj)返回true而hashcode()返回两个不相等的值,编译和运行都是不会报错的。不过这样违反了Java规范,程序也就埋下了BUG。
规范2:如果equals(Object obj)返回false,即两个对象“不相同”,并不要求对这两个对象调用hashcode()方法得到两个不相同的数。说的简单点就是:“如果两个对象不相同,他们的hashcode可能相同”。

 

 根据这两个规范,可以得到如下推论:
 1、如果两个对象equals,Java运行时环境会认为他们的hashcode一定相等。
 2、如果两个对象不equals,他们的hashcode有可能相等。
 3、如果两个对象hashcode相等,他们不一定equals。
 4、如果两个对象hashcode不相等,他们一定不equals。

 

posted @ 2022-07-13 16:06  烟笼寒山  阅读(45)  评论(0)    收藏  举报