我有两个MyObject类型的对象。他们的私人领域有像Integer, int, Long, long, String
之类的东西 - 没有花哨的子对象或任何这种效果。
我想查看他们的字段是否相等。我不是要检查它们是否是内存中的相同对象(相同的引用?),它们不应该是它们,因为这两个对象来自单独的列表/单独创建。
检查一个对象的所有字段是否与第二个对象的所有其他字段具有相同值的正确方法是什么?
答案 0 :(得分:1)
最好的方法是覆盖方法equals(Object)
,让IDE
为您实现。
答案 1 :(得分:0)
您需要覆盖类中的equal方法,并比较两个类的值是否相同,返回true,否则返回false。 例如:
obj1.equals(obj2);
你班上的
@Override
public boolean equals(YourClass obj) {
// compare the values of both objets.
// return true on success;
}
答案 2 :(得分:0)
使用Object.equals()进行比较
答案 3 :(得分:0)
覆盖Object
的{{1}}方法是您情况的最佳选择。您可以确保对象的每个字段都相等,也可以只比较一个您知道唯一的字段或字段组合。
如果您正在使用equals
等集合,则可以考虑使用这些字段覆盖Map
,然后使用hashcode
方法比较哈希码。
供您参考:
equals
应始终确定两个对象在概念上是否“相等”(通常意味着它们具有相同的字段)。equals
比较内存位置,从而比较基本类型之间的相等性==
接口用于命令对象“前方”或“后方”另一个对象;用于排序数组和集合。Comparable
接口类似于Comparator
,但使用“第三方”对象来比较其他两个对象。如果您不希望对象为Comparable
,则可以将此Comparator
传递到集合排序方法。答案 4 :(得分:0)
mDo @Raj K建议。例如,如果您有:
public class MyObject {
int i1;
long l1;
long i2;
// and a bunch of c'tors and methods
}
那么你的equals()方法就像
public Boolean equals( Object o ) {
if ( o instanceof MyObject ) {
MyObject m = (MyObject)o;
return (i1==m.i1) && (l1==m.l1) && (l2==m.l2);
}
return false;
}
如果您的任何字段是对象,则必须更加小心,因为在检查是否
之前还必须首先检查null。this.something.equals(m.something)