码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-04-05 16:56:20      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:存在   dog   标记   result   hex   总结   方法   实现   person   

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() { 
    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;
  }
3、总结
  1) 对象相等则hashCode一定相等;

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

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

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

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

标签:存在   dog   标记   result   hex   总结   方法   实现   person   

原文地址:http://www.cnblogs.com/cupidhk/p/6669475.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!