为什么ArrayLists可以存储不同的对象而数组不能存储?

1 java arrays arraylist

将不同类型的对象放入数组中会抛出一个ArrayStoreException,同时将不同类型的对象放入一个ArrayList作品中.

据我所知,ArrayList是建立在数组之上的,为什么它在那里工作?它的实现方式不同吗?

我搜索但没有找到答案.

Lui*_*oza 6

ArrayList有一个称为字段Object[] elementData,这意味着一个ArrayList支持添加各种对象引用的.这也意味着它ArrayList不支持原始类型,如intor char,而是支持它们的包装类IntegerCharacter.

除非您将它们声明为数组,否则数组通常用于单类型元素Object[].对于原始类型,没有通用数组,只有基元数组int[],char[]并且......


如果你创建一个Object []数组,并放入字符串,然后是一个日期对象,它将抛出异常

这是一个证明相反的代码,通过Object[]存储Strings和a来编译和执行没有问题Date:

Object[] objects = { "hello", "world", new Date() };
System.out.println(Arrays.toString(objects));
Run Code Online (Sandbox Code Playgroud)

输出(日期取决于您电脑的当前时间):

[hello, world, Tue Aug 12 00:09:00 GMT 2014]
Run Code Online (Sandbox Code Playgroud)

你可以在这里查看它.

  • @ StealthyHunter7用于编译目的,因此你不能将`Integer`插入`List <String>`.但是在运行时,它们会被[类型擦除](http://docs.oracle.com/javase/tutorial/java/generics/erasure.html)并成为原始类型. (4认同)