Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Arraylist等于工作_Java - Fatal编程技术网

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如果列表都有一个元素,设置为空-比较结果如何?单独按值还是按类型?@jeppersak
null
等于
null
:)