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 方法,以配置系统资源或执行其他清除。也就是手动垃圾回收。

时间: 2024-10-29 05:14:46

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

重写Object类中的toString方法

package com.ftf.o; /** * 重写祖宗类Object类中的toString方法 * @author 房廷飞 * */ public class TextObject { public static void main(String[] args) { // Object obj; TextObject to=new TextObject(); System.out.println(to.toString()); Person2 p2=new Person2("房廷飞"

equals(),hashcode()方法详解

Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这两个方法,今天就来介绍一些这两个方法的作用. equals()和hashCode()方法是用来在同一类中做比较用的,尤其是在容器里如set存放同一类对象时用来判断放入的对象是否重复. 这里我们首先要明白一个问题: equals()相等的两个对象,hashcode()一定相等,equals()不相等的两个对象,却并不能证明他们的hashcode()不相等.换

Object 类中的 equals方法

1 相等与同一 如果两个对象具有相同的类型以及相同的属性值,则称这两个对象相等.如果两个引用对象指的是同一个对像,则称这两个变量同一.Object类中定义的equals 函数原型为:public boolean equals(Object);他是判断两个对象是否同一,并不是是否相等. 2 equals方法 由于Object 类是所有类的最高基类,所有其他类都继承类Object类的equals()方法,定义原型如下: public boolean equals (Object x){ return

java的Object类中hashCode()和equals()方法-----转载

JAVA代码:    public static void main(String[] args)    {        Object obj1 = new Object();        Object obj2= new Object();        Object obj3 = obj2;        System.out.println("obj1==obj2 ?"+obj1.equals(obj2));        System.out.println("o

问题1、java.lang中String类和Object类中的equals方法比较

String类中的equals方法重写了Object类中的equals方法,下面通过代码来比较二者的不同之处: 一.String类 1. String s1 = "String"; String s2 = "String"; System.out.println(s1 == s2 ); System.out.println(s1.equals(s2));

JAVA中Object类中的equals方法补充

Object类中的equals方法: 无论new多少个对象,当使用 "= =" 来判断的时候,是判断内存地址.判断回事false 若是需要进行对象之间的判断,则需要重写equals方法: public boolean equals(Object obj)//obj是传入的形式参数(对象) { if (obj == null)//判断对象是否为空 { return false;//空则返回false } else { if ( obj instanceof cat)//判断这个传入参数(

java.long.object类中的重要方法

一:概念 java.long.object Object类是所有Java类的祖先.每个类都使用 Object 作为超类. 二:方法概览 clone() 创建并返回此对象的一个副本. equals(Object obj) 指示某个其他对象是否与此对象“相等”. finalize() 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法.(JVM中自带的垃圾回收机制只能回收new出的对象) getClass() 返回一个对象的运行时类. hashCode() 返回该对象的哈希码值

Java关于Object类中equal方法的理解

话不多说,先上例题 1 package Ch_11; 2 3 public class Test { 4 public static void main(String[] args) { 5 Object circle1 = new Circle(); 6 Object circle2 = new Circle(); 7 System.out.println(circle1.equals(circle2)); 8 } 9 } 10 11 class Circle { 12 double radi

Java对象的equals,hashCode方法

今天下午研究了半天hashcode()和equals()方法,终于有了一点点的明白,写下来与大家分享(zhaoxudong 2008.10.23晚21.36). 1. 首先equals()和hashcode()这两个方法都是从object类中继承过来的. equals()方法在object类中定义如下:   public boolean equals(Object obj) { return (this == obj); } 很明显是对两个对象的地址值进行的比较(即比较引用是否相同).但是我们必