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; // Line 7
System.out.println(b[1]);
}
}
我对上面的Java代码有疑问 为什么它会在第7行给出运行时异常而不是编译时错误?
答案 0 :(得分:4)
因为o1是int [] [],而不是int []。你得到的RuntimeException是一个ClassCastException,因为第一个是int数组的数组,后者只是一个int数组。
您没有收到编译时错误,因为o1被定义为Object。所以在编译时,它可以保存从object派生的任何内容,实际上除了基本类型long,int,short,byte,char,double,float和boolean之外,它实际上是Java中的每个Type。因此,在编译时,对象似乎可能实际上是一个int []。
答案 1 :(得分:3)
您不能通过强制转换将二维数组转换为一维数组。您需要以某种方式将值复制到新的一维数组。
答案 2 :(得分:1)
无论何时不使用强制转换,编译器都可以确定用法是否有效。如果您使用强制转换,您告诉编译器您知道自己在做什么,并且必须使用不同的类型作为参考。
int[][] a = {{1, 2,}, {3, 4}};
int[] b = a[1]; // no cast is used here and the compiler can tell this is valid.
Object o1 = a;
int[][] a2 = (int[][]) o1; // This cast is fine.
int[] b2 = (int[]) o1; // My IDE warns this case may produce a ClassCastException.
System.out.println(b[1]);