看到这段代码:
import java.util.*;
public class Temp{
public static void main(String[] args){
List<int[]> list1 = new ArrayList<int[]>(); //WORKS!
List<double[]> list2 = new ArrayList<double[]>(); //WORKS!
//List<double> list3 = new ArrayList<double>(); //DOES NOT WORK
//List<int> list4 = new ArrayList<int>(); //DOES NOT WORK
}
}
AFAIK,java泛型不支持基本类型,那么int[]
是如何编译的?如何在这里进行自动装箱?
答案 0 :(得分:9)
int[]
和double[]
是扩展Object
的对象类型。它们不是原语。
您不能使用数组自动装箱。只在原语和它们的包装器之间。
答案 1 :(得分:1)
您只能使用引用类型(从Object扩展)作为泛型,因此不使用int和double进行编译。
答案 2 :(得分:1)
AFAIK,java泛型不支持基本类型,那么int []是如何编译的?如何在这里进行自动装箱?
首先,int[]
和double[]
不是原始类型。它们是参考类型。
其次,这里没有自动装箱。自动装箱是将原始值转换为相应的包装类型值:
int[]
类型不是值。)所有存在编译时类型检查,int[]
是Object
的子类型。
尝试编译时检查int
是Object
的子类型...失败了,并且给出了编译错误。
如果需要整数或双精度列表,则必须显式使用包装类作为类型参数;例如List<Integer>
或List<Double>
。
答案 3 :(得分:0)
他们是对象。 你可以随时使用Integer或Double。 如果你想使用int,你应该使用Trove http://trove.starlight-systems.com/