[英]ArrayList and String[] AND Object[]
我搜索了这个,但找不到我需要的东西,所以我创建了一个新帖子。 我希望了解这个问题。 谢谢。
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
有人可以解释当我将name
传递给add()
方法然后我得到一个错误,但是当我将name1
传递给add()
方法时,它工作正常,为什么会这样...
arraylist
是String元素的ArrayList,因此您无法向其添加数组实例。 arraylist1
是Object
元素的ArrayList
,因此您可以向其添加数组,因为数组是Object
。
如果您希望将数组的各个元素添加到List
,则两个add
调用都应更改为addAll
:
arrayList.addAll(Arrays.asList(name));
arraylist1.addAll(Arrays.asList(name1));
arraylist.add(name);// error here
错误,因为name
是一个数组。 不是String
。 您正在尝试将Array对象添加到仅接受字符串的ArrayList。
arraylist1.add(name1);// not error
没有错误,因为name1
是一个Object
数组。 在Java中, 每个类都是一个Object,甚至一个Object数组也是一个Object 。 因此它接受它作为对象。 虽然你的name1是一个Objects数组,但作为一个整体,它首先是一个Object。
当你这样做时,你似乎在想
String[] name={"Quan","Doan","Thi","Ha"};
arraylist.add(name);// error here
它应该将数组的所有元素添加到列表中。 这不是真的。 add
方法只是将它给出的一个参数添加到列表中。
在第一种情况下,一个元素是一个字符串数组。 字符串数组本身不是字符串,因此失败。
在第二种情况下,一个元素是一个对象数组。 对象数组本身就是一个对象,因此它被添加到列表中。 但请注意,添加了数组 ,而不是其中的对象。
第一个示例抛出一个错误,因为您声明了一个Strings
的ArrayList
,但后来尝试添加一个Strings
Array
(不是String
,但是一collection
Strings
)。
第二个例子是有效的,因为你声明了Objects
ArrayList
,然后你向它添加了Objects
(理解Java中的所有东西都是一个Object
:一个String
是一个Object
,一个Array
也是例如一个Boolean
也是一个Object
,你可以尝试添加在第二个示例中为True
,您将看到它也可以工作)。
在这里,我看到一些对String
和String[]
误解都不相同,同时看到你的下面的代码
String[] name={"Quan","Doan","Thi","Ha"};
arraylist.add(name);// error here
好像你正试图添加String[]
对象为ArrayList
类型的String
。 如果要将name
数组添加到列表中,则列表类型必须为String[]
。 因此,因为类型不同所以你不能将String[]
对象添加到String
类型的列表中。 但是当你有Object
类型的列表时,你当然可以在其中添加任何对象。
IDE清楚地告诉我们对象数据类型。
第一个代码片段
In this error code snippet:
ArrayList<String> arraylist= new ArrayList<String>();
arraylist.add("Nguyen");
arraylist.add("Viet");
String[] name={"Quan","Doan","Thi","Ha"};
arraylist.add(name);
在第6行,名为
arraylist
对象具有类型ArrayList<java.lang.String>
但您尝试这样的事情: ArrayList<java.lang.String[]>
导致不兼容数据类型错误。
第二个代码段
ArrayList<Object> arraylist1=new ArrayList<Object>();
arraylist1.add("Nguyen");
arraylist1.add("Viet");
Object[] name1={"Quan","Doan","Thi","Ha"};
arraylist1.add(name1);
当步骤调试到第10行时,
name1
的数据类型为java.lang.Object
, arraylist1
数据类型为ArrayList<Object>
。 因此,将元素name1
添加到arraylist1
成功。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.