我搜索了这个,但找不到我需要的东西,所以我创建了一个新帖子.我希望了解这个问题.谢谢.
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是一种ArrayList的Object元素,所以可以增加一个阵列到它,因为阵列是一个Object.
如果您希望将数组的各个元素添加到Lists,则两个add调用都应更改为addAll:
arrayList.addAll(Arrays.asList(name));
arraylist1.addAll(Arrays.asList(name1));
Run Code Online (Sandbox Code Playgroud)
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.
当你这样做时,你似乎在想
String[] name={"Quan","Doan","Thi","Ha"};
arraylist.add(name);// error here
Run Code Online (Sandbox Code Playgroud)
它应该将数组的所有元素添加到列表中.这不是真的.该add方法只是将它给出的一个参数添加到列表中.
在第一种情况下,一个元素是一个字符串数组.字符串数组本身不是字符串,因此失败.
在第二种情况下,一个元素是一个对象数组.对象数组本身就是一个对象,因此它被添加到列表中.但请注意,添加了数组,而不是其中的对象.
因为你声明第1例引发错误ArrayList的Strings,但后来尝试添加Array的Strings(不是一个String,而是一collection中Strings)给它.
第二个例子的作品,因为你声明和ArrayList的Objects,后来你添加Objects到它(明白一切在Java是一种Object:一个String是Object,一个Array也和例如Boolean是Object也,你可以尝试添加True在第二个例子,你会看到,它也会工作).