Java学习---8

来源:互联网 发布:js添加dom resize事件 编辑:程序博客网 时间:2024/06/05 01:01

Object类是Java中所有类的始祖,在Java中每个类都是由它扩展而来的。如果没有明确地指出超类,Object就被认为是这个类的超类。
Object类中的equals方法用于检测一个对象是否等于另外一个对象。在Object类中,这个方法将判断两个对象是否具有相同的引用。
在子类中定义equals方法时,首先调用超类的equals。如果检测失败。对象就不可能相等。如果超类中的都相等,就需要比较子类中的实例域。

表现一个完美的equals方法的建议
1,显式参数命名为otherObject,稍后需要将它转换成另一个叫做other的变量
2,检测this与otherObject使用引用同一个对象:

ifthis==otherObject) return true

3,检测otherObject是否为null,如果为null,返回false
4,比较this与otherObject是否属于同一个类。如果equals的语义在每个子类中有所改变,就使用getClass检测

if(getClass()!=otherObject.getClass()) return false;

如果所有的子类都拥有统一的语义,就使用instanceof检测:

if(!(otherObject instanceof ClassName)) return false;

5,将otherObject转换为相应的类类型变量
ClassName other =(Class Name) otherObject
6,现在开始对所有需要比较的域进行比较了。使用==比较基本类型域,使用equals比较对象域。如果所有的域都匹配,就返回true;否则返回false
return field1==other.field1&&Objects.equals(field2,other,field2)&&……….
如果在子类中重新定义equals,就要在其中包含调用super.equals(other)
对于数组类型的域,可以使用静态的Arrays.equals方法检测相应的数组元素是否相等。

hashCode方法
散列码(hash code)是由对象导出的一个整型值。散列码是没有规律的。
如果重新定义equals方法,就必须重新定义hashCode方法,以便用户可以将对象插入到散列表中
hashCode方法应该返回一个整型数值(也可以是负数),并合理地组合实例域的散列码,以便能够让各个不同的对象产生的散列码更加均匀。
toString方法
用于返回表示对象值的字符串。
绝大多数(但不是全部)的toString方法都遵循这样的格式:类的名字,随后是一对方括号括起来的域值。

原创粉丝点击