![](/img/trans.png)
[英]equals and hashCode defined, arrayList methods still not working
[英]Arraylist Equals working
有一個疑問是等於在Array List中工作的方法,下面代碼剪斷它打印為true。
ArrayList<String> s = new ArrayList<String>();
ArrayList<Integer> s1 = new ArrayList<Integer>();
System.out.println(s1.equals(s));
有人知道為什么它會給出真正的答案。
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.