目前,我正在查看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];
错误将消失。