Java 编译时&;运行时错误
我对上面的Java代码有疑问。Java 编译时&;运行时错误,java,Java,我对上面的Java代码有疑问。 为什么它在第7行给出运行时异常而不是编译时错误?您不能通过强制转换将二维数组转换为一维数组。您需要以某种方式将值复制到新的一维数组。因为o1是int[]],而不是int[]。您得到的RuntimeException是一个ClassCastException,因为第一个是一个int数组数组,而后者只是一个int数组 您不会得到编译时错误,因为o1被定义为一个对象。因此,在编译时,它可以保存从object派生的任何内容,而object实际上是Java中的所有类型,除了
为什么它在第7行给出运行时异常而不是编译时错误?您不能通过强制转换将二维数组转换为一维数组。您需要以某种方式将值复制到新的一维数组。因为o1是int[]],而不是int[]。您得到的RuntimeException是一个ClassCastException,因为第一个是一个int数组数组,而后者只是一个int数组
您不会得到编译时错误,因为o1被定义为一个对象。因此,在编译时,它可以保存从object派生的任何内容,而object实际上是Java中的所有类型,除了基本类型long、int、short、byte、char、double、float和boolean。因此,在编译时,对象可能实际上是int[]。只要不使用强制转换,编译器就可以确定该用法是否有效。如果使用强制转换,则告诉编译器您知道自己在做什么,并且它必须使用不同的引用类型
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书中的一个问题。这本书也有解决办法。
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]);