声明
文章均为本人技术笔记,转载请注明出处https://segmentfault.com/u/yzwall
object类简介object类是所有类的父类,在java中只有基本数据类型不是对象。对于所有数组类型(对象类型&&基本数据类型数组)都继承于object类;
equals方法object类中通过判断两个对象是否具有相同引用,从而判断两个对象是否相同;
子类只要重写equals方法,就必须重写hashcode方法
// in java.lang.object
public boolean equals(object obj) {
return (this == obj);
}
重写equals方法原则:自反性:a.equals(a)返回true;
对称性:a.equals(b)结果和b.equals(a)相同;
传递性:a.equals(b)为true,b.equals(c)为true,则a.equals(c)为true
一致性:对于非null引用a,b, 只要equals()比较操作所用到对象信息不变,多次调用a.equals(b),结果一致;
对于任何非null引用,x.equals(null)必须返回false;
重写equals方法时,参数类型必须为object类型
重写equals方法示例class myobject {
private string name;
private int age;
...
public getname() {
return this.name;
}
public getage() {
return this.age;
}
}
/**
* 重写equals方法demo步骤
* effective java中推荐方式
*/
public boolean equals(object x) {
// 1. 检查x和this是否引用同一个对象
if (x == this) {
return true;
}
// 2. 检查x对象类型是否是myobject派生
if (!(x instanceof myobject)) {
return false;
}
// 3. 比较数据域
// 经过1,2检查,将参数转换为正确类型
myobject o = (myobject)(x);
return this.name.equals(x.getname()) && this.age == (x.getage());
}
hashcode()方法hashcode方法返回对象的散列码,相等对象必须返回相等的hashcode,不同对象的hashcode尽可能不相等;
// in java.lang.object
public native int hashcode();
重写equals时总要重写hashcode重写equals不重写hashcode,会导致“不相等对象拥有相同的hashcode”,导致集合类hashmap,hashset和hashtable无法工作;极端情况下,在散列表中使所有对象的hashcode都相等,所有对象都被映射到同一个桶中,散列表退化成链表;
当两个对象调用equal返回true,则两个对象各自调用hashcode()返回相同hashcode;
当两个对象调用equal返回false, 两个对象各自调用hashcode()返回的hashcode可以相同(散列冲突不能完全避免)
tostring()方法object类中tostring方法,输出对象的“对象类名@散列码”;
java object类方法分析声明文章均为本人技术笔记,转载请注明出处https://segmentfault.com/u/yzwall
object类简介object类是所有类的父类,在java中只有基本数据类型不是对象。对于所有数组类型(对象类型&&基本数据类型数组)都继承于object类;
equals方法object类中通过判断两个对象是否具有相同引用,从而判断两个对象是否相同;
子类只要重写equals方法,就必须重写hashcode方法
// in java.lang.object
public boolean equals(object obj) {
return (this == obj);
}
重写equals方法原则:自反性:a.equals(a)返回true;
对称性:a.equals(b)结果和b.equals(a)相同;
传递性:a.equals(b)为true,b.equals(c)为true,则a.equals(c)为true
一致性:对于非null引用a,b, 只要equals()比较操作所用到对象信息不变,多次调用a.equals(b),结果一致;
对于任何非null引用,x.equals(null)必须返回false;
重写equals方法时,参数类型必须为object类型
重写equals方法示例class myobject {
private string name;
private int age;
...
public getname() {
return this.name;
}
public getage() {
return this.age;
}
}
/**
* 重写equals方法demo步骤
* effective java中推荐方式
*/
public boolean equals(object x) {
// 1. 检查x和this是否引用同一个对象
if (x == this) {
return true;
}
// 2. 检查x对象类型是否是myobject派生
if (!(x instanceof myobject)) {
return false;
}
// 3. 比较数据域
// 经过1,2检查,将参数转换为正确类型
myobject o = (myobject)(x);
return this.name.equals(x.getname()) && this.age == (x.getage());
}
hashcode()方法hashcode方法返回对象的散列码,相等对象必须返回相等的hashcode,不同对象的hashcode尽可能不相等;
// in java.lang.object
public native int hashcode();
重写equals时总要重写hashcode重写equals不重写hashcode,会导致“不相等对象拥有相同的hashcode”,导致集合类hashmap,hashset和hashtable无法工作;极端情况下,在散列表中使所有对象的hashcode都相等,所有对象都被映射到同一个桶中,散列表退化成链表;
当两个对象调用equal返回true,则两个对象各自调用hashcode()返回相同hashcode;
当两个对象调用equal返回false, 两个对象各自调用hashcode()返回的hashcode可以相同(散列冲突不能完全避免)
tostring()方法object类中tostring方法,输出对象的“对象类名@散列码”;
以上就是java中object类的方法分析的详细内容。