子类重写Object类中的toString、equals、hashCode方法

Object又叫超类,是所有类的祖先,所有类都继承了toString、equals、hashCode等方法。
继承过来的方法大部分需要重写加以改善,才能投入到实际应用中。

toString

输出一个对象时,默认输出的内容是:类名 + “@” +hashCode值。

输的内容:com.ives.fourteen.Student@745f

输出太抽象,看不到有价值的信息。

重写toString

public String toString() {
    
    
        return "Student{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                '}';
    }
输出的内容:Student{
    
    name='tom', sex='man', age=18}

输出对象时,可以看到对象的属性和对应的值

equals

比较两个对象时,equals默认比较两个对象的内存地址。

如果变量A和变量B的ID相等,对于我们人类来说,他们应该是相等的,但是在机器看来,A和B的内存地址不一致,所以不相等。
所以我们需要对equals进行符合现实生活规则的重写。

    public boolean equals(Object o) {
    
    
        //如果两个对象内存地址相同,那么返回true
        if (this == o) return true;
        //如果比较的对象为null、或者两个对象的类不一样,那么返回false
        if (o == null || getClass() != o.getClass()) return false;
        //强制类型转换
        Student student = (Student) o;
        //比较两个对象的ID,如果ID相等,就代表两个对象相等。(ID是唯一的)
        return ID == student.ID;
    }

hashCode

在Java集合中,判断两个对象是否相等的流程如下:

  1. 比较两个对象的hashCode
  2. 两个对象进行equals

比如有两个ID相等的对象,分配了不同hashCode,那么在集合中,机器会认为这是两个不同的对象。
所以我们需要对hashCode进行符合现实生活规则的重写。

    public int hashCode() {
    
    
    	//根据ID分配hashCode值
        return Objects.hash(ID);
    }

猜你喜欢

转载自blog.csdn.net/Mr_Qian_Ives/article/details/110424332