Java原始数据类型的二维数组

3
一个包含原始数据类型的二维数组能否包含不同类型的元素?我看过一些文章,有的说可以,有的说不行。

3
不,Java 是强类型语言。然而,Object[] 可以技术上包含多种类型,你可以在向该数组添加/移除元素时进行类型转换。 - nem035
你能提供一个示例文章的链接,表明它可以吗? - mellamokb
实际上,您可以使用位运算(当然除了returnAddress)将所有原始值存储在“最宽”的类型即long和double中。 - Ιναη ßαbαηιη
@balalaika 如果一个类型为int的变量看起来可以分配给一个类型为long的引用,唯一的原因是Java会隐式地将较小类型自动转换为更宽的类型,因为不存在数据损失的可能性。只是想澄清一下。 - Parker Hoyes
3个回答

2

一个基本类型的二维数组,比如 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

0
一个原始数据类型的二维数组可以包含不同类型的元素吗?我读过一些文章,有些说可以,有些说不行。
int 数组为例:
int[] nums1;     //Array of integers
int[][] nums2;   //Array of (Array of integers)
int[][][] nums3; //Array of (Array of (Array of integers))

如果你将二维数组视为一个带有行和列的表格,或者你想知道这个表格是否可以在不同的行中包含不同的数据类型,那么答案是否定的。

但是,由于多维数组实际上只是数组的数组,因此它们确实保存了不同类型的数据:一个保存了int,另一个保存了一个数组(一个对象)


0
针对Nem的评论,我建议您想要拥有一个公共接口的二维数组,这样容器(二维数组)可以容纳不同类型。当看到该接口的数组时,对于另一个程序员来说,这将更有意义,而不是一个Object数组。此外,使用“instanceof”运算符来检查所述接口的特定实现。
如果需要,我可以提供一个示例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接