Java ArrayList和字符串[]以及对象[]

Java ArrayList和字符串[]以及对象[],java,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<

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

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
ArrayList ArrayList=new ArrayList();
arraylist.add(“Nguyen”);
arraylist.添加(“越南”);
String[]name={“Quan”、“Doan”、“Thi”、“Ha”};
arraylist.add(名称);//这里出错
ArrayList ArrayList 1=新的ArrayList();
arraylist1.添加(“Nguyen”);
arraylist1.添加(“越南”);
Object[]name1={“Quan”、“Doan”、“Thi”、“Ha”};
arraylist1.add(name1);//不出错

有人能解释一下,当我将
name
传递到
add()
方法中时,我会得到一个错误,但是当我将
name1
传递到
add()
方法中时,它工作得很好,为什么会这样…

arraylist
是字符串元素的arraylist,所以不能向它添加数组实例
ArrayList 1
对象
元素的
ArrayList
,因此可以向其中添加数组,因为数组是
对象

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

arrayList.addAll(Arrays.asList(name));
arraylist1.addAll(Arrays.asList(name1));
错误,因为
name
是一个数组。不是
字符串
。您正在尝试将数组对象添加到仅接受字符串的ArrayList中

arraylist1.add(name1);// not error

没有错误,因为
name1
对象
数组。在Java中,每个类都是一个对象,即使是对象数组也是一个对象。因此,它接受它作为一个对象。虽然你的名字1是一个对象数组,但作为一个整体,它首先是一个对象本身。

你似乎认为当你这么做的时候

String[] name={"Quan","Doan","Thi","Ha"};
arraylist.add(name);// error here 
它应该将数组的所有元素添加到列表中。那不是真的。
add
方法只是将给定的一个参数添加到列表中

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


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

第一个示例引发了一个错误,因为您声明了
字符串的
数组列表
,但随后尝试向其添加
字符串的
数组
(不是
字符串
,而是
字符串的
集合)


第二个示例之所以有效,是因为您声明了
对象的
ArrayList
,然后向其中添加了
对象(了解Java中的一切都是一个
对象
:一个
字符串
是一个
对象
,一个
数组
,例如一个
布尔值
也是一个
对象
,您可以尝试在第二个示例中添加
真值
,您会发现它也会起作用).

在这里,我看到了对
String
String[]
的一些误解,但看到了下面的代码

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

似乎您正试图将
String[]
对象添加到
String
类型的
ArrayList
中。如果要将
name
数组添加到列表中,则列表类型必须是
String[]
。因此,由于类型不同,无法添加
String[]
object进入类型列表
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);
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
。因此,将元素
name1
添加到
arraylist1
成功。

java中的每个类型实例不是都派生自
对象吗?是否存在无法避免的任何警告将引用值添加到
arraylist1
?@ShaunWilson原语不是从
Object
派生的。您仍然可以将它们添加到
arraylist1
,因为它们将是自动装箱的,但不再是原语。此外,
everything
一词太大。运算符在java中可能不是对象在其他语言中,这会导致混淆。@Jean-FrançoisSavard My bad..应该是
每个类
。感谢您指出。@ShaunWilson没有任何警告。您可以向其中添加任何类型的对象或原语。如果您看到只有类和原语。由于类型为Object的arraylist,您可以向对象添加任何类至于原语部分,从Java 1.5开始,我们有自动装箱/取消装箱功能,可以自动将任何原语转换为其等效的包装类。因为
对象[]
对象
ArrayList<Object> arraylist1=new ArrayList<Object>();
arraylist1.add("Nguyen");
arraylist1.add("Viet");
Object[] name1={"Quan","Doan","Thi","Ha"};
arraylist1.add(name1);