Java类继承了Object的所有属性和方法,如: toString(), hashCode(), equals()
1) toString() 方法
1、经常由系统默认调用,是活动当前对象的文本描述
2、Object默认返回值: 全限定名@hashCode
3、建议覆盖为: 当前对象的文本描述
2) equals()方法
1、用来比较两个对象是否相等的方法。
2、比较对象分为两种:“引用相等”不“对象相等”。
3、比较引用值是否相等: “==”。
4、比较对象的内容是否相等:xxx.equals()方法。
5、equals在Object类中声明,默认的比较规则是:比较引用。
6、建议覆盖,实现对象的比较(比较对象的状态,就是比较对象的数据)。
覆盖规则:
1、自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
2、对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
3、传递性:对于任何非空引用值 x、y 和 z,如果x.equals(y) 返回 true,并且y.equals(z) 返回true,那么x.equals(z) 应返回 true。
4、一致性:对于任何非空引用值 x 和 y,多次调用x.equals(y) 始终返回 true 戒始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
5、对于任何非空引用值 x,x.equals(null) 都应返回 false。
Equals():主要用于比较对象的内容是否相等(对象的属性),但是Object类中的equals()方法的底层实现用的是“==”,双等号是判断是否是同一个对象,满足不了我们的需求所以需要重写equals()方法
public boolean equals(Object obj){
if(!(obj instanceof Person)){
//return false;
throw new ClassCastException("类型错误");
}
Person p = (Person)obj;
}
3) hashCode() 方法
1、hashCode()方法要不equals方法一同覆盖(Sun公司规定)。
2、当两个对象equals比较为true时,应具有相同的hashCode()值。
3、当两个对象equals比较为false时,应具有不相同的hashCode()值。
4、hashCode() 值要稳定(一致性),一个对象创建以后就不应该再变化。
5、默认的hashCode()值是当前堆对象地址转换的一个整数,这个整数不是内存地址!
6、一般使用对象的OID值作为hashCode的值
OID是对象的唯一编号,在项目中一般采用数据库生成OID,也就是数据库中的“主键”。
网友评论