在Java代码中如何重写equals和hashCode呢?

书欣 Java经验 发布时间:2023-01-28 09:08:28 阅读数:12828 1
下文笔者讲述java代码重写equals和hashCode的示例分享,如下所示

equals和hashCode方法用途

当我们比较两个java对象时,
    此时笔者建议大家重写equals和hashCode方法
例:重写equals和hashCode方法的示例
 
User.java

public class User {
    private String name;
    private int age;
    private String passport;
 
	//getters and setters, constructor
 
    @Override
    public boolean equals(Object o) {
 
        if (o == this) return true;
        if (!(o instanceof User)) {
            return false;
        }
 
        User user = (User) o;
 
        return user.name.equals(name) &&
                user.age == age &&
                user.passport.equals(passport);
    }
 
    //Idea from effective Java : Item 9
    @Override
    public int hashCode() {
        int result = 17;
        result = 31 * result + name.hashCode();
        result = 31 * result + age;
        result = 31 * result + passport.hashCode();
        return result;
    }
 
}

JDK 7及更高版本的重写方法

User.java
import java.util.Objects;
 
public class User {
    private String name;
    private int age;
    private String passport;
 
	//getters and setters, constructor
 
    @Override
    public boolean equals(Object o) {
 
        if (o == this) return true;
        if (!(o instanceof User)) {
            return false;
        }
        User user = (User) o;
        return age == user.age &&
                Objects.equals(name, user.name) &&
                Objects.equals(passport, user.passport);
    }
 
    @Override
    public int hashCode() {
        return Objects.hash(name, age, passport);
    }
}

Apache Commons Lang中EqualsBuilder和HashCodeBuilder函数

User.java
import org.apache.commons.lang3.builder;
 
public class User {
    private String name;
    private int age;
    private String passport;
 
	//getters and setters, constructor
 
     @Override
    public boolean equals(Object o) {
 
        if (o == this) return true;
        if (!(o instanceof User)) {
            return false;
        }
 
        User user = (User) o;
 
        return new EqualsBuilder()
                .append(age, user.age)
                .append(name, user.name)
                .append(passport, user.passport)
                .isEquals();
    }
 
    @Override
    public int hashCode() {
        return new HashCodeBuilder(17, 37)
                .append(name)
                .append(age)
                .append(passport)
                .toHashCode();
    } 
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202301/16748688925540.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者