final int[] i = {0,1};//下面这句是错的
i = new int[3];//下面这句是可以的,但我希望它不可以
i[0] = 1;

解决方案 »

  1.   

    楼主的final int i = new int[2];这个语句,有问题吧。
      

  2.   

    漏了[]不用那个了,下面的更能说明我的问题:final int[] i = {0,1};//下面这句是错的
    i = new int[3];//下面这句是可以的,但我希望它不可以
    i[0] = 1;
      

  3.   

    不可以实现!可以想像,一个类中的final成员是要求在实例的初始化完成之前完成赋值的(在么在声明的同时赋值,要么在构造器中赋值)。可以想像一个数组对象是一个类,数组对象中的成员由于是在数组本身完成初始化以后再被赋值,因此不可以实现final。
      

  4.   

    再补充一下,可能会让你更加清楚:int[] i = {1, 2};在这句里面,i这个数组的初始化过程是这样的:
    1) 创建一个int[]型的变量i
    2) 在堆中创建一个空的数组结构
    3) 初始化数组中的二个元素为0
    4) 将第一个元素重新赋值为1,将第二元重新赋值为2
    5) 返回一个指向自己的引用,并将这个引用赋给变量i可以看出,第3步到第4步的过程中,数组的值是非变不可的,否则数组中各个元素永远是0。这就是为什么数组中的元素不可能是final的原因。
      

  5.   

    final int i = new int[2];
    有问题
    final int[]i={1,2};
      

  6.   

    final 的值是不可以变的。要变就不能是final
      

  7.   

    如果不是一定要用数组,可以换一种思路,
    final class AConst{
        public static int i1 = 1;
        public static int i2 = 2;
    }
      

  8.   

    如果不是一定要用数组,可以换一种思路,
    final class AConst{
        public static int i1 = 1;
        public static int i2 = 2;
    }引用这个final类中的成员就是了。