ArrayList和String [] AND Object []

Qua*_*yen 14 java

我搜索了这个,但找不到我需要的东西,所以我创建了一个新帖子.我希望了解这个问题.谢谢.

ArrayList<String> arraylist= new ArrayList<String>();
arraylist.add("Nguyen");
arraylist.add("Viet");

String[] name={"Quan","Doan","Thi","Ha"};
arraylist.add(name);// error here 

ArrayList<Object> arraylist1=new ArrayList<Object>();
arraylist1.add("Nguyen");
arraylist1.add("Viet");
Object[] name1={"Quan","Doan","Thi","Ha"};
arraylist1.add(name1);// not error
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下,当我name进入add()方法然后我得到一个错误,但当我name1进入add()方法,它工作正常,为什么会这样...

Era*_*ran 21

arraylist是String元素的ArrayList,因此您无法向其添加数组实例.arraylist1是一种ArrayListObject元素,所以可以增加一个阵列到它,因为阵列是一个Object.

如果您希望将数组的各个元素添加到Lists,则两个add调用都应更改为addAll:

arrayList.addAll(Arrays.asList(name));
arraylist1.addAll(Arrays.asList(name1));
Run Code Online (Sandbox Code Playgroud)


Sur*_*tta 8

arraylist.add(name);// error here 
Run Code Online (Sandbox Code Playgroud)

错误,因为name是一个数组.不是String.您正在尝试将Array对象添加到仅接受字符串的ArrayList.

arraylist1.add(name1);// not error
Run Code Online (Sandbox Code Playgroud)

没有错误,因为name1是一个Object数组.在Java中,每个类都是一个Object,甚至一个Object数组也是一个Object.因此它接受它作为对象.虽然你的name1是一个Objects数组,但作为一个整体,它首先是一个Object.


Rea*_*tic 6

当你这样做时,你似乎在想

String[] name={"Quan","Doan","Thi","Ha"};
arraylist.add(name);// error here 
Run Code Online (Sandbox Code Playgroud)

它应该将数组的所有元素添加到列表中.这不是真的.该add方法只是将它给出的一个参数添加到列表中.

在第一种情况下,一个元素是一个字符串数组.字符串数组本身不是字符串,因此失败.

在第二种情况下,一个元素是一个对象数组.对象数组本身就是一个对象,因此它被添加到列表中.但请注意,添加了数组,而不是其中的对象.


ius*_*ing 5

因为你声明第1例引发错误ArrayListStrings,但后来尝试添加ArrayStrings(不是一个String,而是一collectionStrings)给它.

第二个例子的作品,因为你声明和ArrayListObjects,后来你添加Objects到它(明白一切在Java是一种Object:一个StringObject,一个Array也和例如BooleanObject也,你可以尝试添加True在第二个例子,你会看到,它也会工作).