将对象数组转换为通用数组

myc*_*int 5 java generics arraylist typecasting-operator

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

 E[] newData = (E[]) new Object[Math.max(current * 2, minCapacity)];
Run Code Online (Sandbox Code Playgroud)

但是,当我将数组声明为特定类型时,IDE 将显示错误。

Object[] arr = new Object[10];
    int[] arr1 = (int[]) new Object[arr.length];
Run Code Online (Sandbox Code Playgroud)

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

Kon*_*kov 4

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

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

如果你这样做(例如)

Object[] arr = new Object[10];
Integer[] arr1 = (Integer[]) new Object[arr.length];
Run Code Online (Sandbox Code Playgroud)

错误就会消失。