java用equals和==比较两个对象

一、概述

我建立了一个String字段的类然后,我创建了两个对象,我也必须使用==运算符对其进行比较.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));
    }


}

编译后显示两次错误。如果两个对象具有相同的字段-“测试”,为什么会为假?

二、详解

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

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

在您的情况下,如果MyClass字符串匹配,则确实将两个居中实例视为相等,则:

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

…但是通常如果您要定义一个类,那么等效性要比单个字段的等效性强(a在这种情况下)。


旁注:如果覆盖equals,则几乎总是需要覆盖hashCode就像在equalsJavaDoc中说的那样

请注意,通常有必要在重写此hashCode方法时重写该方法,以维护该hashCode方法的常规协定,该协定规定相等的对象必须具有相等的哈希码。

如若转载,请注明出处:https://www.javaidea.cn/article/8307.html

(0)
上一篇 2022年2月7日 上午10:03
下一篇 2022年2月7日 上午10:03

相关推荐

发表评论

您的电子邮箱地址不会被公开。