int vs int []差异 - 在泛型内部自动装箱?

时间:2011-10-30 08:34:05

标签: java generics autoboxing

看到这段代码:

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[]是如何编译的?如何在这里进行自动装箱?

4 个答案:

答案 0 :(得分:9)

int[]double[]是扩展Object的对象类型。它们不是原语。

您不能使用数组自动装箱。只在原语和它们的包装器之间。

答案 1 :(得分:1)

您只能使用引用类型(从Object扩展)作为泛型,因此不使用int和double进行编译。

答案 2 :(得分:1)

  

AFAIK,java泛型不支持基本类型,那么int []是如何编译的?如何在这里进行自动装箱?

首先,int[]double[]不是原始类型。它们是参考类型。

其次,这里没有自动装箱。自动装箱是将原始转换为相应的包装类型

  • 此处没有使用包装器类型值。
  • 确实,根本没有涉及。 (int[]类型不是值。)
  • 此处甚至没有任何类型级转换。

所有存在编译时类型检查,int[]Object的子类型。

尝试编译时检查intObject的子类型...失败了,并且给出了编译错误。

如果需要整数或双精度列表,则必须显式使用包装类作为类型参数;例如List<Integer>List<Double>

答案 3 :(得分:0)

他们是对象。 你可以随时使用Integer或Double。 如果你想使用int,你应该使用Trove http://trove.starlight-systems.com/