一个包含原始数据类型的二维数组能否包含不同类型的元素?我看过一些文章,有的说可以,有的说不行。
一个基本类型的二维数组,比如 int
,在技术上并不仅仅是由基本类型组成。外层数组包含了一些int[]
数组,实际上它们是Object
- 不是一个基本类型(int[]
是 Object
的一个子类型)。
这意味着一个 int[][]
数组可以包含 null
,而内部的 int[]
数组只能包含原始的 int
类型。然而,int[][]
数组不能包含除 int[]
以外的任何类型的元素。
演示
这段代码可以编译并执行,没有异常:
int[][] a = {{1, 2, 3}, {4, 5, 6}, null};
System.out.println(Arrays.deepToString(a));
Object b = a;
System.out.println(Arrays.deepToString((int[][]) b));
int[][] c = a;
System.out.println(Arrays.deepToString(c));
int[] d = a[1];
System.out.println(Arrays.toString(d));
Object e = d;
System.out.println(Arrays.toString((int[]) e));
int[] f = a[2];
System.out.println(Arrays.toString(f));
并将输出:
[[1, 2, 3], [4, 5, 6], null]
[[1, 2, 3], [4, 5, 6], null]
[[1, 2, 3], [4, 5, 6], null]
[4, 5, 6]
[4, 5, 6]
null
int
数组为例:int[] nums1; //Array of integers
int[][] nums2; //Array of (Array of integers)
int[][][] nums3; //Array of (Array of (Array of integers))
如果你将二维数组视为一个带有行和列的表格,或者你想知道这个表格是否可以在不同的行中包含不同的数据类型,那么答案是否定的。
但是,由于多维数组实际上只是数组的数组,因此它们确实保存了不同类型的数据:一个保存了int
,另一个保存了一个数组(一个对象)
。
Object[]
可以技术上包含多种类型,你可以在向该数组添加/移除元素时进行类型转换。 - nem035int
的变量看起来可以分配给一个类型为long
的引用,唯一的原因是Java会隐式地将较小类型自动转换为更宽的类型,因为不存在数据损失的可能性。只是想澄清一下。 - Parker Hoyes