程序少写了一句,应该是:
public class FinalData {
  final int[] a = { 1, 2, 3, 4, 5, 6 };
  //......
  public static void main(String[] args) {
    FinalData fd1 = new FinalData();
    for(int i = 0; i < fd1.a.length; i++)
      fd1.a[i]++; 
  }
}//---------编译通过

解决方案 »

  1.   

    问句柄数量只是手段,目的是问a[i][j][k]到底是不是句柄...
      

  2.   

    :(
    你想急死我...
    如上面的例子,是句柄的话,用final修饰后还可以改变其值,不是的话就不行了...
      

  3.   

    所谓的句柄是指的引用,是指向对象的引用。数组是一种特殊的对象,而且在Java 中多种数组是一个更加特别的对象。具体一点到你说的例子,计算方法如下:
    int[][][] a=new int[3][3][3]; a 是一个对象,这个对象是一个由三个对象组成的数组对象;// int[][][]a = new int[3][][];a[0]是一个对象,它也是一个由三个对象组成的数组// a[0] = new int[3][];a[0][0] 是一个对象,它是一个有三个整型组成的数组
    a[0][1] 第二个对象,它是一个有三个整型组成的数组
    a[0][2] 第三个对象,它是一个有三个整型组成的数组;同理 a[1],a[2],计算结果是: 1 + 4 + 4 + 4 = 13 个。整数(int) 不是对象,因此不是引用(句柄), a[i][j][k] 在这种情况下不是句柄。
      

  4.   

    a[i][j][k]当然不是句柄,只是数组的元素,只是一个整数而已……在TIJ的例子中,改变a[i]是可以的,改变a就不行了,因为a被声明为final的……其实在JAVA中是没有多维数组的,所谓的多维数组,如a[i][j][k]都是通过“数组的数组”来实现的,所以说int[3][3][3]创建了:1+3+3*3=13 个句柄……我以前也没考虑过这个问题,都是刚才想通的……
      

  5.   

    biti_9512207(波波斯基):什么问题?
      

  6.   

    恕我顽固:
    to:ender(ender)
    我想问的是:如果像你们说得,a[i]不是句柄的话,那在上面的代码中,final数据成员的值是不允许被改变的!
    如果像你们说得,a是句柄而a[i]是整数值的话,刚好和你说得相反,是a所指的对象的值可被改变,而a[i]的值却不能被改变了.
    因为:"可以改变final句柄所指对象的值,但不能令他重新指向..."
    难道你的意思是说 final int[] a 以后,a是fianl的,而a[i]不是final的?
    我理解的对吗??
      

  7.   

    TO:htouch(回家)“难道你的意思是说 final int[] a 以后,a是fianl的,而a[i]不是final的?”——就是这个意思……如果你学过C,就很好理解了……
    对于a[],a只是一个指向该数组首地址的指针而已,而你final的正是这个指针……清楚了没?
      

  8.   


    a是final的,a[i]不是final的。
    a是句柄,a[i]不是句柄,a[i]是int。
      

  9.   

    也就是说,a是一个指向数组的句柄,而a[i]是这个数组中的一个整数值...
    是这样吧
    这样说来挺简单的,也不知我被哪里绕住了.
    回想这几天看<thinking in java>,不寒而栗,也不知有多少不清楚的概念被掩盖了... ...
    谢了几位.