ArrayList<int> vs ArrayList<int[]>?
ArrayList<int> vs ArrayList<int[]>?
我无法弄清楚为什么 ArrayList<int> not allowed但是 ArrayList<int[]> 是 allowed。
我的印象是集合中不允许使用原始数据类型,那么为什么这是合法的?
Java 中的 array
是 object。在 Java 中,我们可以使用 new
运算符创建数组,我们知道每个 object 都是使用 new 运算符创建的。因此我们可以说 array
也是一个 object.
Collection 仅适用于任何 Object
。 int
是原始数据类型,int[]
是 Object。
这就是不允许 ArrayList<int>
但允许 ArrayList<int[]>
的原因。
泛型仅适用于引用类型(任何 Object)。
原始 int
不是引用类型。
int[]
是,因为 any 数组也是一个对象。
处理多个 int 值的正确方法是使用 just int[]
(不将它们放入列表中),或者使用 List<Integer>
.选择哪一个实际上取决于您的具体用例。
int 是原始的。
int[] 是对象。
带有 ANY_OBJECT 的 ArrayList 有效。
带有 ANY_PRIMITIVE 的 ArrayList 无效。
并且因为 int[] 是一个对象,所以 ArrayList 是可能的,但对于 int 原语 ArrayList 是无效的。
Java中的数组是一个对象。在 Java 中,我们可以使用 new 运算符创建数组,我们知道每个对象都是使用 new 运算符创建的。
在Java中,每个数组类型都有一个class,所以int[]有一个class,float、double等也是如此。
数组类型的直接superclass是Object。每个数组类型都实现接口 Cloneable 和 java.io.Serializable。 class 对象的所有方法都可以在数组上调用。这可以从下面的代码中检查:
public class Test {
public static void main(String[] args)
{
System.out.println(args instanceof Object);
int[] arr = new int[2];
System.out.println(arr instanceof Object);
}
}
输出:真
真
ArrayList 初始化中使用的菱形运算符指定了泛型。泛型类型是泛型 class 或通过类型参数化的接口。
您可以在此处查看 ArrayList 的源代码:http://hg.openjdk.java.net/jdk7/jdk7/jdk/file/tip/src/share/classes/java/util/ArrayList.java
可以看到参数化构造函数中elementData的类型是Object。原语是一种不是对象的数据类型:
private transient Object[] elementData;
因此 int 是 java 中的原始数据类型,它不能用作通用类型,其中 int[] , 那个直接superclass 对象, 就可以.
您可以在此处阅读更多相关信息:https://docs.oracle.com/javase/specs/jls/se7/html/jls-10.html
我无法弄清楚为什么 ArrayList<int> not allowed但是 ArrayList<int[]> 是 allowed。
我的印象是集合中不允许使用原始数据类型,那么为什么这是合法的?
Java 中的 array
是 object。在 Java 中,我们可以使用 new
运算符创建数组,我们知道每个 object 都是使用 new 运算符创建的。因此我们可以说 array
也是一个 object.
Collection 仅适用于任何 Object
。 int
是原始数据类型,int[]
是 Object。
这就是不允许 ArrayList<int>
但允许 ArrayList<int[]>
的原因。
泛型仅适用于引用类型(任何 Object)。
原始 int
不是引用类型。
int[]
是,因为 any 数组也是一个对象。
处理多个 int 值的正确方法是使用 just int[]
(不将它们放入列表中),或者使用 List<Integer>
.选择哪一个实际上取决于您的具体用例。
int 是原始的。
int[] 是对象。
带有 ANY_OBJECT 的 ArrayList 有效。
带有 ANY_PRIMITIVE 的 ArrayList 无效。
并且因为 int[] 是一个对象,所以 ArrayList 是可能的,但对于 int 原语 ArrayList 是无效的。
Java中的数组是一个对象。在 Java 中,我们可以使用 new 运算符创建数组,我们知道每个对象都是使用 new 运算符创建的。
在Java中,每个数组类型都有一个class,所以int[]有一个class,float、double等也是如此。 数组类型的直接superclass是Object。每个数组类型都实现接口 Cloneable 和 java.io.Serializable。 class 对象的所有方法都可以在数组上调用。这可以从下面的代码中检查:
public class Test {
public static void main(String[] args)
{
System.out.println(args instanceof Object);
int[] arr = new int[2];
System.out.println(arr instanceof Object);
}
}
输出:真 真
ArrayList 初始化中使用的菱形运算符指定了泛型。泛型类型是泛型 class 或通过类型参数化的接口。
您可以在此处查看 ArrayList 的源代码:http://hg.openjdk.java.net/jdk7/jdk7/jdk/file/tip/src/share/classes/java/util/ArrayList.java
可以看到参数化构造函数中elementData的类型是Object。原语是一种不是对象的数据类型:
private transient Object[] elementData;
因此 int 是 java 中的原始数据类型,它不能用作通用类型,其中 int[] , 那个直接superclass 对象, 就可以.
您可以在此处阅读更多相关信息:https://docs.oracle.com/javase/specs/jls/se7/html/jls-10.html