对象识别之重写对象equals

Object类的概述
 

基本概念
Java.lang.Object类是所有类层次结构的根类,任何类都是该类的直接/间接子类。

常用的方法
boolean equals(Object obj) - 用于判断调用对象是否与参数对象相等。

该方法默认比较两个对象的地址,与 == 的效果等效。
若希望比较对象的内容,则需要进行方法的重写。
若该方法重写了,则应该去重写hashCode()方法,为了满足hashCode()的常规协定
int hashCode() - 用于获取调用对象的哈希码值(内存地址的编号)并返回。

若两个对象调用equals()方法相等,则各自调用该方法得到的哈希码值必须相同。
若两个对象调用equals()方法不相等,则各自调用该方法的结果可以相同,
但最好不相同。
String toString() - 用于返回调用对象的字符串表示形式。

默认返回的字符串内容是:包名.类名@哈希码的无符号十六进制形式。
若希望返回其他内容,则需要进行方法的重写。

当使用print()/println()打印引用变量时,会自动调用toString()方法。
当使用字符串和引用变量进行拼接(+)时,会自动调用toString()方法。

package entity;

import java.util.Objects;

public class UserOver {
    private int id;
    private String name;
    private String gender;
    
    // getter() and setter()
    
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        UserOver user = (UserOver) o;
        return id == user.id &&
                Objects.equals(name, user.name) &&
                Objects.equals(gender, user.gender);
    }

    @Override
    public int hashCode() {        
        int result;        
        result = getName ().hashCode();        
        result = 29 * result + getBirthday().hashCode();      
        result = 29 * result + getAge();   
        return result;    
    }
}
 

上一篇:java String为什么一定要重写hashcode


下一篇:作业三 重写equals()和hashCode()方法