如何解决如何使用户定义的 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
如果 true
和 obj1
指的是完全相同的对象,则返回 obj2
。 obj1.equals(obj2)
可以(如您的情况)比较两个对象的内容,并且可以为由于方法 equals
的实现而被认为相等的两个不同对象返回 true。
您通过语句 obj1 = obj2
获得相同的对象(堆内存中的相同地址,相同的引用)。
如果你这样做,
obj1 = new ...
obj2 = new ...
这些总是两个不同的对象。您强制 java 创建两个新对象。根据{{1}},这些永远不会相同。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。