Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么可以创建基元数组集合而不能创建基元集合_Java - Fatal编程技术网

Java 为什么可以创建基元数组集合而不能创建基元集合

Java 为什么可以创建基元数组集合而不能创建基元集合,java,Java,Java不支持使用原语创建集合,因此以下构造产生编译错误(“参数不能是原语类型”): List ints=new ArrayList(); 另一方面,允许创建数组或原语的集合,因此可以使用以下构造: List<int[]> ints = new ArrayList<int[]>(); List ints=new ArrayList(); 这背后的逻辑是什么 编辑:问题实际上是关于基元数组,而不是基元数组,所以请不要解释为什么我不能在集合中存储基元,而是为什么我可以

Java不支持使用原语创建集合,因此以下构造产生编译错误(“参数不能是原语类型”):

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