微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用户定义的 Class == 的行为与 String == 相同

如何解决如何使用户定义的 Class == 的行为与 String == 相同

我正在尝试了解 object == 运算符比较 的内部实现,以实现与 String == 用于我的用户定义的类对象。

下面是我的实现逻辑。

1. Bean 类

package com.study.equals;

public class SomeBean {
    int id;
    
    public SomeBean(int id) {
        this.id = id;
    }
    
    @Override
    public boolean equals(Object obj) {
        if(obj instanceof SomeBean) {
            return this.id==((SomeBean)obj).id;
        } else {
            return false;
        }
    }
    
    @Override
    public int hashCode() {
        return this.id + 2000;
    }
    
    @Override
    public String toString() {
        return "[Inside toString: " + this.hashCode() + "]";
    }
}

2.测试班

包 com.study.equals;

公共类测试{

public static void main(String[] args) {
    SomeBean obj1 = new SomeBean(10);
    SomeBean obj2 = new SomeBean(10);
    if(obj1 == obj2) {
        System.out.println("true");
    }else {
        System.out.println("false");
    }   
}

}

怀疑

  • 有人能帮我理解为什么我在这里得到错误
  • 我如何才能在此处获得真实作为回复

解决方法

obj1 == obj2 如果 trueobj1 指的是完全相同的对象,则返回 obj2obj1.equals(obj2) 可以(如您的情况)比较两个对象的内容,并且可以为由于方法 equals 的实现而被认为相等的两个不同对象返回 true。

您通过语句 obj1 = obj2 获得相同的对象(堆内存中的相同地址,相同的引用)。

如果你这样做,

obj1 = new ...
obj2 = new ...

这些总是两个不同的对象。您强制 java 创建两个新对象。根据{{​​1}},这些永远不会相同。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。