0

看这段代码:

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

4 回答 4

9

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

你不能用数组自动装箱。仅在原语及其包装器之间。

于 2011-10-30T08:35:47.923 回答
1

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

于 2011-10-30T08:46:59.363 回答
1

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

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

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

  • 这里没有使用包装器类型值。
  • 事实上,根本不涉及任何价值观。(int[]是类型而不是值。)
  • 这里甚至没有进行任何类型级别的转换。

只有一个编译时类型检查,它int[]Object.

并且尝试的编译时检查intObject... 的子类型,但失败并给您一个编译错误。

如果你想要一个整数或双精度的列表,你必须明确地使用包装类作为类型参数;例如List<Integer>List<Double>

于 2011-10-30T09:06:15.323 回答
0

它们是对象。您始终可以使用 Integer 或 Double。如果你想使用 int 你应该使用 Trove http://trove.starlight-systems.com/

于 2011-10-30T09:04:59.363 回答