比较对象、相同的内容、不同的 id(在 eclipse 调试器中)



我的想法快用完了...我正在比较两个对象,它们都有一个自定义类型的数组列表字段。

这两个对象在数组列表中都包含一个元素。

当我查看 eclipse 调试器时,它看起来完全相同,直到最接近的细节,除了不同的 id(它看起来像:(id=111)在调试器中)

有趣的是,这个不同的ID位于一个类型为整数(计数器)的字段上。这显然不应该发生,因为整数已经实现了等于和哈希代码,对吧?

另一个具有不同ID的字段是字符串(过滤器)类型

具有这些字段的两个对象之间的 equals 方法返回 false...我不知道为什么...所有 equals 和 hashCode 方法都在每种自定义类型中实现。

这是来自 eclipse 调试器:

对象 1:

Object (id=159)
arrayList ArrayList<E>  (id=175)
   [0]  Item  (id=175)      
      counter Integer  (id=179) 
      filter    "abcd" (id=181) 
            count   4
            hash    -717152022  
            offset  2   
            value    (id=189)   

对象 2:

Object (id=259)
arrayList ArrayList<E>  (id=267)
   [0]  Item  (id=268)      
      counter  Integer  (id=268)    
      filter    "abcd" (id=269) 
            count   4
            hash    -717152022  
            offset  2   
            value    (id=270)   

你可以简单地使用 ArrayList 超类的 equals() 实现: AbstractList。

当且仅当您在类Item中重写了 equals() 方法时。

例如:

@Override
public boolean equals(Item item){
    if(this.counter.equals(item.counter) 
          && this.filter.equals(item.filter)){
         // && etc for all Item fields that make the equality
        return true;
    }
    return false;
}

另请注意,你不能依靠hashCode来比较相等性,请参阅这篇文章:Java hashCode()方法是否是对象相等性的可靠度量?

你如何比较你的ArrayLists? 请发布一些代码。

public static void main(String[] args) {
    List<String> list1 = new ArrayList<String>();
    List<String> list2 = new ArrayList<String>();
    list1.add("abcd");
    list2.add("abcd");
    if (list1.equals(list2)) {
        System.out.println("hello");
    }
}

打印你好。

那你怎么办?

最新更新