Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较对象、相同内容、不同id(在eclipse调试器中)_Java_Compare_Equals_Hashcode - Fatal编程技术网

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

Java 比较对象、相同内容、不同id(在eclipse调试器中),java,compare,equals,hashcode,Java,Compare,Equals,Hashcode,我的想法快用完了。。。我比较两个对象,它们都有一个自定义类型的数组列表字段 两个对象在数组列表中都包含一个元素 当我查看eclipse调试器时,它看起来完全相同,直到最接近的细节,除了不同的id(调试器中的id=111) 有趣的是,这个不同的ID位于一个整型(计数器)字段上。这显然不应该发生,因为integer已经实现了equals和hashcode,对吗 另一个ID不同的字段类型为string(filter) 具有这些字段的两个对象之间的equals方法返回false。。。我快没主意了为什么。

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

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

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

有趣的是,这个不同的ID位于一个整型(计数器)字段上。这显然不应该发生,因为integer已经实现了equals和hashcode,对吗

另一个ID不同的字段类型为string(filter)

具有这些字段的两个对象之间的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)   
对象(id=159)
arrayList arrayList(id=175)
[0]项(id=175)
计数器整数(id=179)
过滤器“abcd”(id=181)
第四点
哈希-717152022
偏移量2
值(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)   
对象(id=259)
arrayList arrayList(id=267)
[0]项(id=268)
计数器整数(id=268)
过滤器“abcd”(id=269)
第四点
哈希-717152022
偏移量2
值(id=270)

如何比较阵列列表?请发一些代码

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");
    }
}
publicstaticvoidmain(字符串[]args){
List list1=新的ArrayList();
List list2=新的ArrayList();
清单1.添加(“abcd”);
清单2.添加(“abcd”);
如果(列表1.equals(列表2)){
System.out.println(“你好”);
}
}
你好

那么您要做什么呢?

您可以简单地使用ArrayList超类的名称:AbstractList

当且仅当您已重写类
中的
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来比较相等,请参阅本文:

数组列表内置了equals和hashCode,我用equals方法比较两个对象,如果(objectA.equals(objectB))System.out.println(“hello”);发布一个能证明你的问题的帖子会帮助你得到更好的答案。