Object类中equals()、hashCode()、toString()方法重写讲解
equals()方法:
定义:对于任何非空引用值 A 和 B,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(A == B 具有值 true)。
重写规则:
- 判断一定相等(引用一致)
- 判断一定不等(类型不一致)
- 判断可能相等(需要把当前的对象给强转之后进行比较)
重写后的比较:与重写前相比较重写之后一般只要自定义为两个对象的对应属性值相等就返回为true,否则就返回false。
实例代码:
class Car {
int wheels;
@Override//重写equals方法
public boolean equals(Object obj) {
// TODO Auto-generated method stub
//自己制定比较规则
//容错处理
if(obj instanceof Car) {
//向下转型
Car car = (Car) obj;
return this.wheels > car.wheels;
} else {
System.out.println("类型错误");
//退出程序
System.exit(0);
}
return false;
}
}
hashCode()方法:
定义:由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的)。
代码:
public class Demo2 {
public static void main(String[] args) {
Car car = new Car();
//hashCode()获取的是对象的hash值,可以理解为当前对像的身份证。
System.out.println(car.hashCode());//118352462这是十进制的。
System.out.println(Integer.toHexString(car.hashCode()));//70dea4e十六进制的
}
}
重写:
- 根据当前对象的唯一标识进行重写。
- 如果为空就直接返回1,不为空就返回唯一标识的 hashCode。
重写后的比较:重写前只要hashCode不相等那么两个对象一定不相同;重写后,hashCode如果不一样,那么两个对象不相等,如果hashCode一样的话,再比较equals,如果true就相同,否则不相等。
- 实例代码:
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + wheels;
return result;
}
toString()方法:
定义:象和此对哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:getClass().getName() + ‘@’ + Integer.toHexString(hashCode())。
重写:
- 字符串加上 ” 区别非字符串。
- 类名 + {field1=value1, field2=value2}。
重写后的比较:重写前返回的是类名 + {field1=value1, field2=value2},重写后返回的是属性的拼接的字符串。
实例代码:
class Car {
int wheels;
//重写toString方法
@Override
public String toString() {
return "Car [wheels=" + wheels + "]";
}
}