java - Java对象的 "sameness"是怎么定义的?

标签 java equality

我想将自定义类型的对象添加到集合中。我有几个相同的,即它们的公共(public)变量具有相同的值。

我不希望将“相同”对象的多个实例添加到集合中,但每次创建一个新对象时,它总是会被添加。

这是因为类 Object 的 equals 方法在对象上实现了最具辨别力的可能等价关系:“对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一对象时,此方法才返回 true (x == y 的值为真)。”

我可以重写这个对象的 equals 方法以不同地定义它吗?

谢谢大家问题解决了

Java 对象的相同性是通过覆盖 Java 对象的 equals() 方法定义的。

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((uri == null) ? 0 : uri.hashCode());
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (!(obj instanceof Resource))
        return false;
    Resource other = (Resource) obj;
    if (uri == null) {
        if (other.uri != null)
            return false;
    } else if (!uri.equals(other.uri))
        return false;
    return true;
}

最佳答案

您需要覆盖 equals() hashCode() 方法来告诉 HashSet 您认为什么是相等的。

如果您使用的是 TreeSet,则应改为实现 Comparable

关于java - Java对象的 "sameness"是怎么定义的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5221327/

相关文章:

java - 我正在尝试使用 jasper 报告开发 excel 页面

C# 与 Java 枚举(适用于 C# 新手)

java - 关于清理/删除 Tomcat 临时目录中存在的文件的建议

java - 启动进程时出现 IOException

equality - refl 在 agda : explaining congruence property

c - 使用赋值运算符的 If 子句的行为与使用等于运算符的行为相同

list - 比较 Racket 中的两个列表

java - 使用 Google API Client Library for Java 更改批量 HTTP 请求的读取超时

java - 如何在 Java 中比较字符串?

c# - 两个相等的 .NET 对象不会说它们是