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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Object类中的toString(),equals(), hashCode()方法之间的关系相关的知识,希望对你有一定的参考价值。

1、在没有重写之前:
  1) toString()方法返回的是对象的:Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于: getClass().getName() + ‘@‘ + Integer.toHexString(hashCode())  比如:[email protected]
  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()方法之间的关系的主要内容,如果未能解决你的问题,请参考以下文章

intellij idea中怎么覆盖tostring(),hashcode(),equals()?

javase学习二

012-Object类

java类hashcode()equals()toString()方法

Object类中的常用方法

Object类中的方法