Object类中的toString(),equals(), hashCode()方法之间的关系

1,在没有重写之前:
(1)toString()方法返回的是对象的:Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:
getClass().getName() + ‘@’ + Integer.toHexString(hashCode())
比如:com.itheima.hah.Dog@2260e277
(2)equals():对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)克隆的对象和原来的对象不是同一个对象。对象地址不一样
(3)hashCode():由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的)。
2.重写之后:
(1)toString()方法一般返回的是:属性的拼接
@Override
public String toString() {
// TODO Auto-generated method stub
return “Person2 [name=” + name + “, age=” + age + “]”;
}
(2)equals()方法:重写之后一般只要自定义为两个对象的所有属性值相等就返回为true;
(3)hasdCode():重写hashCode,
@Override
public int hashCode()
{
final int PRIME = 31;
int result = 1;
result = PRIME * result + getId();
return result;
}
1) 对象相等则hashCode一定相等;

 2) hashCode相等对象未必相等。也就是说两个不同的对象也有可能hashCode(散列码(取余得出的))相同

判断两个对象是否相等的条件:

没有重写的话,只要hashCode不相等那么两个对象一定不相同,
重写的话,首先判断hashCode如果不一样,那么两个对象不相等,如果hashCode一样的话,再比较equals,如果true就相同,否则不相等。

finalize():当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。子类重写 finalize 方法,以配置系统资源或执行其他清除。也就是手动垃圾回收。

你可能感兴趣的:(Object类中的toString(),equals(), hashCode()方法之间的关系)