[英]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.