您的位置:首页 > 移动开发 > Objective-C

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

2016-07-17 22:36 609 查看
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 方法,以配置系统资源或执行其他清除。也就是手动垃圾回收。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: