目前,我正在查看java.util.ArrayList的源代码。现在,我发现函数 public void sureCapacity(int minCapacity)将对象数组强制转换为通用数组,就像下面的代码一样:

 E[] newData = (E[]) new Object[Math.max(current * 2, minCapacity)];

但是,当我将数组声明为特定类型时,IDE将显示错误。
Object[] arr = new Object[10];
    int[] arr1 = (int[]) new Object[arr.length];

谁能告诉我它们之间的区别?非常感谢。

最佳答案

这是因为E(在ArrayList的源代码中)代表某种引用类型,而不代表某种原始类型。

这就是为什么在尝试将Object实例数组转换为基元数组时会出现编译时错误的原因。

如果您这样做(例如)

Object[] arr = new Object[10];
Integer[] arr1 = (Integer[]) new Object[arr.length];

错误将消失。

07-28 02:43
查看更多