Java Arraylist等于工作
有一个怀疑就等于在数组列表中工作的方法,下面的代码剪掉它打印真实Java Arraylist等于工作,java,Java,有一个怀疑就等于在数组列表中工作的方法,下面的代码剪掉它打印真实 ArrayList<String> s = new ArrayList<String>(); ArrayList<Integer> s1 = new ArrayList<Integer>(); System.out.println(s1.equals(s)); arraylists=newarraylist(); ArrayList s1=新的Ar
ArrayList<String> s = new ArrayList<String>();
ArrayList<Integer> s1 = new ArrayList<Integer>();
System.out.println(s1.equals(s));
arraylists=newarraylist();
ArrayList s1=新的ArrayList();
系统输出println(s1等于s);
有人知道为什么它会给出真正的ans吗。寻找ArrayList的方法
当且仅当指定对象也是列表、两个列表的大小相同且两个列表中所有对应的元素对相等时,返回true
由于没有元素,所有条件都满足,因此true
如果您将元素添加到两个列表中(每个列表中至少有一个),以查看所需的输出。的合同是,如果两个列表的所有元素都相等(就等于()
)。在这里,两者都是空列表,因此它们是相等的。泛型类型是不相关的,因为无论如何都没有要比较的列表元素
但是,它们在=
方面并不相等,因为它们是两个不同的对象
有关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.
}
公共布尔等于(对象o){
if(o==this)//不是相同的列表,因此不返回
返回true;
如果(!(o instanceof List))//是List的实例,则不返回
返回false;
ListIterator e1=ListIterator();
ListIterator e2=((List)o).ListIterator();
而(e1.hasNext()&&e2.hasNext()){//两者都没有next,所以这里没有循环
eo1=e1.next();
对象o2=e2.next();
如果(!(o1==null?o2==null:o1.equals(o2)))
返回false;
}
return!(e1.hasNext()| | e2.hasNext());//两者都验证为false,因此否定false最终返回true。
}
正如前面的答案所指出的,equals返回true,因为这两个对象都是列表的实例,并且大小相同(0)
还值得一提的是,一个列表
包含整数
,另一个字符串
并不影响行为,因为在Java中,因为两者都是空的。。。,查看ArrayList
的equals方法注意:s==s1
将返回False请参见答案它解释了另一个注意:运行时由于@LanceJava for(=)而丢失的泛型类型存在不兼容的操作数类型ArrayList和ArrayListIf如果列表都有一个元素,设置为空-比较结果如何?单独按值还是按类型?@jeppersaknull
等于null
:)