目前,我正在查看java.util.ArrayList的源代码。现在我发现函数 public void ensureCapacity(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];
任何人都能告诉我他们之间的区别吗?非常感谢。
答案 0 :(得分:3)
您永远不能将引用类型(从Object
扩展的任何内容)转换为基本类型(int
,long
,boolean
,char
,等)。
您也不能将像Object[]
这样的引用类型的数组转换为像int[]
这样的基本类型的数组。
基元不能代表通用参数。
答案 1 :(得分:3)
这是因为E
(在ArrayList
的源代码中)代表某些引用类型,但不代表某些原语类型。
这就是为什么在尝试将Object
个实例数组转换为基元数组时会出现编译时错误的原因。
如果你这样做(例如)
Object[] arr = new Object[10];
Integer[] arr1 = (Integer[]) new Object[arr.length];
错误将消失。
答案 2 :(得分:2)
.Background {
display: block;
margin-left: auto;
margin-right: auto;
width: 100vw;
height: 100vh;
background-image: url('background.png');
background-size: cover;
}
不是int
,但它是原始的。
使用Object
,它会起作用。
Integer