繁体   English   中英

Arraylist等于工作

[英]Arraylist Equals working

有一个疑问是等于在Array List中工作的方法,下面代码剪断它打印为true。

     ArrayList<String> s = new ArrayList<String>();

     ArrayList<Integer> s1 = new ArrayList<Integer>();

     System.out.println(s1.equals(s));

有人知道为什么它会给出真正的答案。

文档的equals()方法ArrayList

当且仅当指定的对象也是列表时,返回true,两个列表具有相同的大小,并且两个列表中的所有对应元素对都相等。

由于没有元素,所有条件都满足,因此是true

如果向两个列表中添加元素( 每个中至少有一个 ),则可以查看所需的输出。

List.equals的契约是两个列表相等,如果它们的所有元素相等(以equals() )。 这里两个都是空列表,所以它们是相同的。 泛型类型无关紧要,因为无论如何都没有要比较的列表元素。

但是,它们在==方面并不相同,因为它们是两个不同的对象。

有关equals()==之间的详细信息,请参阅此问题

下面是AbstractList中equals方法的ArrayList实现,其中包含一些提交它实际执行的操作:

public boolean equals(Object o) {
   if (o == this) // Not the same list so no return
       return true;
   if (!(o instanceof List)) // is an instance of List, so no return 
       return false;

   ListIterator<E> e1 = listIterator();
   ListIterator<?> e2 = ((List<?>) o).listIterator();
   while (e1.hasNext() && e2.hasNext()) { // Both have no next, so no loop    here
        E o1 = e1.next();
        Object o2 = e2.next();
        if (!(o1==null ? o2==null : o1.equals(o2)))
            return false;
   }
   return !(e1.hasNext() || e2.hasNext()); // Both validate to false, so negating false return true in the end.
} 

如前面的答案所指出的,equals返回true,因为两个对象都是List实例并且具有相同的大小(0)。

还值得一提的是,由于Java中的类型擦除 ,一个List包含Integer而另一个String不会影响行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM