1.public class mainTest{
2.  public static void main(String[] args){
3.       int[] [] a={{1,2,},{3,4}};
4.       int[] b =(int[]) a[1];
5.       Object ol =a;
6.       int[] [] a2=(int[] [])ol;
7.       int[] b2 =(int[])ol;
8.      System.out.println(b[1]); 
9.     }
10. }
以上代码有一个异常,classCastException。。出错在第七行,请高手说明3到8行的执行细节,这个很不清楚。
关于数组我应该理解那些?

解决方案 »

  1.   

    int[] [] a2=(int[] [])ol
    int[] b2 =(int[])ol
    二维数组能直接转化为1维数组吗,当然报错
      

  2.   

    如果你想把一个二组数组打印出来可以用:
    System.out.println(Arrays.deepToString(a));
      

  3.   

    1.public class mainTest{
    2.  public static void main(String[] args){
    3.       int[] [] a={{1,2,},{3,4}};
    4.       int[] b =(int[]) a[1];
    5.       Object ol =a;
    6.       int[] [] a2=(int[] [])ol;
    7.       int[] b2 =(int[])ol;
    8.      System.out.println(b[1]); 
    9.     }
    10. }第七行转换错了,o1是二维数组a的首地址,它只能赋给一个二维数组,把它改成
    int[][] b2 =(int[][])ol就对了,
    你第三行相当于定义一个二维数组并赋值或者说定义了一个一维数组并给再给该一维数组中的每个元素创建一个一维数组;
    所以第四行的int[]b取得的就是a中的第二个元素(它也是个一维数组)即{3,4};
    第五行是把一个二维数组的首地址赋给object对象o1;
    所以第六行你再把它赋给一个二维数组时正确的;
    第七行相当于把一个二维数组强制赋值给了一个一维数组,它当然要报 java.lang.ClassCastException类型转换错误的异常了。