java - 对象数组和字符串数组有什么区别

标签 java arrays covariance

这个有效:

Object[] array = new Object[3];  
array[0] = "ddd";  
array[1] = new Integer(12);  

这不会:(在新整数处崩溃)

Object[] array2 = new String[3];  
array2[0] = "ddd";  
array2[1] = new Integer(12);  

我读过 covariance但仍然无法理解第二个代码示例被禁止的潜在技术原因,或者为什么抛出 ArrayStoreException。 对象引用数组和字符串引用数组之间的本质区别是什么?

我知道在第二个例子中,数组被实例化是为了向它添加字符串,但仍然有一些不符合逻辑的点击。有人可以用简单的术语解释一下吗?

最佳答案

Object引用文献可以包含任何类型的 Object , 而 String引用文献只能包含 String s——JVM 将在运行时检查它。真的没有比这更多的了。

您的第二个示例实际上指出了 Java 语言设计中的一个缺陷。这个异常可以在运行时发生,这显然是不好的!泛型特性的设计略有不同,因此泛型集合不会出现同样的问题。 String[]是一个Object[] , 遗憾的是;但是一个List<String>不是 List<Object>

关于java - 对象数组和字符串数组有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8400281/

相关文章:

java - 使用 Rally Rest API 时,在提交之前检查查询的有效性

java - 如何从字节数组创建 RSAPrivateKey 实例?

ios - Swift Array of Arrays 终止了 Xcode 索引,因此 type-ahead 不起作用

java - 通配类型的协变和逆变

c# - 通用协变和逆变

java - 小服务程序编程

java - 如何从 Maven 依赖项提供 Servlet?

python - 关于 numpy 数组在 Python 中如何存储的一些困惑

javascript - jQuery 遍历循环删除元素

c++ - 从类模板实现纯虚函数 - 参数类型