如何检查两个对象在Java中是否具有相同的值?

时间:2018-01-17 23:58:45

标签: java

我有两个同一个类的对象。该类包含许多其他具有不同类型的对象,如List<>,...

确定这两个值是否具有相同值的最佳方法是什么?我尝试使用哈希码功能,但它似乎对我不起作用。

public class MyClass{
   List<OtherClass> myList;
   String foo;
   SubClass mySubClass;

   public MyClass(values...){ ... }
   ...
}

MyClass obj1 = new MyClass(values...);
MyClass obj2 = new MyClass(values...); // same values with obj1

if(obj1.hashcode() == obj2.hashcode()){
    System.out.println("This is what I want");
}else{
    System.out.println("This is what happens");
}

2 个答案:

答案 0 :(得分:0)

您需要覆盖MyClass的equals()和hashcode()方法。

你的想法可能会为你做。

你想要的是一个深刻的比较。 equals方法应该进入每个列表并迭代,并进行比较。

hashcode应该使用每个元素的哈希码来生成哈希码。

答案 1 :(得分:0)

请覆盖equals方法以检查是否相等。不要使用哈希码进行相等性检查。

请检查equals / hashcode上的java文档,因为这篇帖子可能过于冗长。在equals / hashcode和它的用途之间。

为了比较两个列表,你可以简单地使用list.equals方法...不需要迭代Ex的列表(请参阅java.util.List文档中的equals);

// Sample Code...
public class MyClass {
    List<OtherClass> myList;

    public boolean equals(Object o) {
       if (o instanceof List) {
           myList.equals((List) o) ;
       }
       return false;
    }
}

希望这会有所帮助......