为什么我们必须覆盖Java中的equals()方法? [英] Why do we have to override the equals() method in Java?

查看:303
本文介绍了为什么我们必须覆盖Java中的equals()方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对我们覆盖 .equals 方法的原因感到困惑。

I have some confusion about the reason that we override the .equals method.

例如:

Test test1 = new Test(3);
Test test2 = new Test(3);

//The if comparison does the same thing that the overridden `.equals()` method does.
if(test1.equals(test2)){
    System.out.println("test1 and test2 are true in .equals()");
}

// Override .equals method.
public boolean equals(Object object) {
    if(object instanceof Test && ((Test)object).getValue() == this.t) {
        return true;
    } else {
        return false;
    }
}

我不明白为什么我们要覆盖 .equals()方法。

I do not understand why we have to override the .equals() method.

推荐答案

来自文章 覆盖Java中的equals和hashCode


java.lang.Object提供的equals()类的默认实现 比较内存位置,只有如果两个引用变量指向相同的内存位置,则返回true,即基本上它们是同一个对象。

Default implementation of equals() class provided by java.lang.Object compares memory location and only return true if two reference variable are pointing to same memory location i.e. essentially they are same object.

如果通过逻辑方式或通过某种业务逻辑定义,则Java建议覆盖等于和hashCode方法:example:

Java recommends to override equals and hashCode method if equality is going to be defined by logical way or via some business logic: example:

Java标准库中的许多类都会覆盖它,例如字符串覆盖等于,如果两个String对象的内容完全相同,则其equals()方法的实现返回true

many classes in Java standard library does override it e.g. String overrides equals, whose implementation of equals() method return true if content of two String objects are exactly same

整数包装类覆盖等于执行数字比较等。

Integer wrapper class overrides equals to perform numerical comparison etc.

这篇关于为什么我们必须覆盖Java中的equals()方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆