任何人都可以解释此异常以及此代码中实际发生的事情:
public class Dims {
public static void main(String[] args) {
int[][] a = {{1, 2,}, {3, 4}};
int[] b = (int[]) a[1];
Object o1 = a;
int[][] a2 = (int[][]) o1;
int[] b2 = (int[]) o1; //Exception in thread "main" java.lang.ClassCastException: [[I cannot be cast to [I
System.out.println(b[1]);
}
}
答案 0 :(得分:3)
int[]
与int[][]
不兼容,因此您无法将其转换为另一个,但您正在尝试这样做。 o1
的运行时类型为int[][]
,您尝试将其投放到int[]
。
好的,为什么这些类型被称为[[I
和[I
?您可以尝试运行int[].class.toString()
和int[][].class.toString
来了解这一点。 int[].class
将使用代码[
(表示数组)I
(表示整数)来表示,int[][].class
将由[[
表示(这意味着I
(整数)的数组数组。
答案 1 :(得分:1)
异常是因为您将2d数组转换为1d
[[I
代表2d数组的类
[[
代表2d数组
[I
代表1d数组的类
[
代表1d数组
I
是整数
答案 2 :(得分:1)
你不能将二维数组转换为一维数组。在这里,您[[I cannot be cast to [I
得到o1 is internally pointing to 2_D integer array and b2 is 1-D array
。
代替那条线你可以这样做:
int[] b2 = ((int[][])o1)[0];
这里[[I
表示编译器将原始类型包装到Integer类并创建Integer类型的二维数组对象。 [I
表示整数类型的一维数组。