当前位置: 首页 > 知识库问答 >
问题:

用。equals()和==运算符比较两个对象

端木令雪
2023-03-14

我用一个字符串字段构造了一个类。然后创建了两个对象,并且必须使用==运算符.equals()对它们进行比较。以下是我所做的:

public class MyClass {

    String a;

    public MyClass(String ab) {
        a = ab;
    }

    public boolean equals(Object object2) {
        if(a == object2) { 
            return true;
        }
        else return false;
    }

    public boolean equals2(Object object2) {
        if(a.equals(object2)) {
            return true;
        }
        else return false;
    }



    public static void main(String[] args) {

        MyClass object1 = new MyClass("test");
        MyClass object2 = new MyClass("test");

        object1.equals(object2);
        System.out.println(object1.equals(object2));

        object1.equals2(object2);
        System.out.println(object1.equals2(object2));
    }


}

共有1个答案

许明朗
2023-03-14

==比较对象引用,它检查两个操作数是否指向同一个对象(不是等效对象,而是同一个对象)。

如果要比较字符串(查看它们是否包含相同的字符),则需要使用equals比较字符串。

在您的例子中,如果MyClass的两个实例在字符串匹配的情况下确实被认为是相等的,那么:

public boolean equals(Object object2) {
    return object2 instanceof MyClass && a.equals(((MyClass)object2).a);
}

侧注:如果重写equals,则几乎总是需要重写hashcode。正如equalsJavadoc中所说:

请注意,每当重写hashcode方法时,通常需要重写该方法,以便维护hashcode方法的通用约定,该约定声明相同的对象必须具有相同的哈希代码

 类似资料:
  • 问题内容: 我建立了一个领域的课程。然后,我创建了两个对象,我也必须使用运算符对其进行比较。这是我所做的: 问题答案: 比较对象引用,它检查两个操作数是否指向同一对象(不是等效对象,是同一对象)。 如果要比较字符串(以查看它们是否包含相同的字符),则需要使用来比较字符串。 在你的情况下,如果字符串匹配,则确实将两个居中实例视为相等,则: …但是通常,如果你要定义一个类,那么等效性要比单个字段的等效

  • 我有一个检查两个变量引用的代码,我遇到了这个有点混乱的情况: 结果是: 我的第一个问题是为什么第一个和第三个引用相等?如果第三个变量等于第二个变量,它应该是,因为它们的对象引用不相等。 当我将值更改为时,我感到困惑,如下所示: 然后结果变成: 为什么会这样?

  • 问题内容: 我需要使用位运算符比较两个整数。我遇到了一个问题,我必须不使用比较运算符就比较两个整数。使用位运算符会有所帮助。 假设a = 4;b = 5; 我们必须证明a不等于b。但是,我想进一步扩展它,例如,我们将显示哪个更大。这里b更大。 问题答案: 您至少需要将其与0进行比较,并且在概念上这是CPU所做的比较。例如 可以建模为等于,因为位必须相同才能返回0 如果这是你可以删除的,因为这可以暗

  • 问题内容: 稍微打错一下就遇到了这个问题(在Python 2.7.5中): 当它,我不小心爆炸了月亮。 我的理解是相当于和表现良好的类(如内置函数),相当于。 如果没有或运算符,那么我认为Python使用。 但是,这些方法都与工作对象,而与运营商 做 的工作。发生这种情况的原因是什么? 问题答案: 但是,当<和>运算符起作用时,这些方法都不能与函数对象一起起作用。发生这种情况的原因是什么? 在任何

  • 概述 比较运算符用于比较两个值的大小,然后返回一个布尔值,表示是否满足指定的条件。 2 > 1 // true 上面代码比较2是否大于1,返回true。 注意,比较运算符可以比较各种类型的值,不仅仅是数值。 JavaScript 一共提供了8个比较运算符。 > 大于运算符 < 小于运算符 <= 小于或等于运算符 >= 大于或等于运算符 == 相等运算符 === 严格相等运算符 != 不相等运算符

  • 问题内容: 假设我需要使用按某些域逻辑排序的元素。通过这种逻辑,不相等的元素的顺序无关紧要,因此compare方法可以返回0,但是在这种情况下,我不能将它们放入。 所以,问题是:这样的代码有什么缺点: 更新 : 好。如果它应该永远是方法之间的一致性,并且,作为@SPFloyd - seanizer和其他人说。如果我删除接口并移入此逻辑是否会更好甚至更好(我可以在不破坏封装的情况下做到这一点)?因此