Java 为什么可以创建基元数组集合而不能创建基元集合
Java不支持使用原语创建集合,因此以下构造产生编译错误(“参数不能是原语类型”):Java 为什么可以创建基元数组集合而不能创建基元集合,java,Java,Java不支持使用原语创建集合,因此以下构造产生编译错误(“参数不能是原语类型”): List ints=new ArrayList(); 另一方面,允许创建数组或原语的集合,因此可以使用以下构造: List<int[]> ints = new ArrayList<int[]>(); List ints=new ArrayList(); 这背后的逻辑是什么 编辑:问题实际上是关于基元数组,而不是基元数组,所以请不要解释为什么我不能在集合中存储基元,而是为什么我可以
List ints=new ArrayList();
另一方面,允许创建数组或原语的集合,因此可以使用以下构造:
List<int[]> ints = new ArrayList<int[]>();
List ints=new ArrayList();
这背后的逻辑是什么
编辑:问题实际上是关于基元数组,而不是基元数组,所以请不要解释为什么我不能在集合中存储基元,而是为什么我可以在集合中描述基元数组?集合是通用的:
集合t
必须是引用类型。基元不是引用类型s、 另一方面,原语数组是一种引用类型,因此可以将其放入集合
。请记住,每个原语都有其包装类,可以作为类型传递给泛型类型
根据报告:
如果类声明了一个或多个类型变量(§4.4),则该类是泛型的
#
4.3.1.对象
对象是类实例或数组
#
4.4.类型变量
类型变量是在类、接口、方法和构造函数体中用作类型的非限定标识符
集合是泛型的:Collection
T
必须是引用类型。基元不是引用类型。另一方面,基元数组是引用类型,因此可以将其放入Collection
。请记住,每个基元都有其包装类,可以作为类型传递给泛型类型
根据报告:
如果类声明了一个或多个类型变量(§4.4),则该类是泛型的
#
4.3.1.对象
对象是类实例或数组
#
4.4.类型变量
类型变量是在类、接口、方法和构造函数体中用作类型的非限定标识符
因为数组是对象,而不是基元。@阿克塞尔:这里说基元数组是对象吗?@反斜杠:这不是真正的答案,它并没有说基元数组是对象还是非对象。数组是对象,不管它是包含对象还是基元,因为数组是对象,而不是基元。@阿克塞尔:这里我有人说基元数组是一个对象吗?@反斜杠:这不是真正的答案,它并没有说基元数组是对象还是非对象。数组是一个对象,不管它是包含对象还是基元。这是真的,但我认为这不是完整的答案,因为泛型只在编译时存在。事实上,如果如果不使用泛型类型,您可以编写如下内容:List a=new ArrayList();a.add(new int[0]);a.add(0)
。第一个将存储为数组本身,第二个将自动装箱,而不是存储为基元。这是真的,但我认为这不是完整的答案,因为泛型只在编译时存在。事实上,如果不使用泛型类型,您可以编写如下内容:List a=new ArrayList();a.add(new int[0]);a.add(0);
。第一个将存储为数组本身,第二个将自动装箱,而不是存储为基元。
List<int[]> ints = new ArrayList<int[]>();
Type:
PrimitiveType
ReferenceType