簡體   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