java - 为什么这两个 Java 对象不相等?

标签 java equals

我编写了一些代码,发现对象是 eno equals - 这是一个微不足道的问题,但我不明白默认 equals 是如何工作的。

class A {
    String id;
    public A(String id) {
        this.id = id;
    }

    public static void main(String args[])
    {
        A a = new A("1");
        A b = new A("1");
        System.out.println(a.id);
        System.out.println(b.id);
        System.out.println(a.equals(b));
    }
}

结果是:

1
1
false

但我想要 a.equals(b) == true 为什么是 false

最佳答案

你的类目前只扩展了 Object 类,并且在 Object 类中 equals 方法看起来像这样

public boolean equals(Object obj) {
    return (this == obj);
}

你需要的是覆盖这个方法,比如这样

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    A other = (A) obj;
    if (id == other.id)
        return true;
    if (id == null)
        return false;
    if (other.id == null)
        return false;
    if (!this.id.equals(other.id))
        return false;
    return true;
}

此外,当您覆盖 equals 时,您可能应该覆盖 hashCode 方法,但这不是您的问题的主题。您可以阅读更多相关信息 here .

关于java - 为什么这两个 Java 对象不相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14824113/

相关文章:

java - Tomcat 虚拟主机和通配符 dns 匹配

java - Hibernate 和可序列化实体

xpath - XPath运算符 “!=”。它是如何工作的?

c# - 比较 Array[][] 与 SequenceEqual() 和自定义方法的不同结果

java - 在 Android Studio 的不同方法中使用一种方法的变量值

java - 执行 while 循环 (Java)

Scala equals 方法中的匹配

java - 错误地重写 Java 中 hashSet 的 equals 方法

java - 如何将参数从漂亮的 URL 传递到 JSP 页面?

java - 什么是平等契约(Contract)的重要字段(有效的 java 项目 8)