方法声明中参数声明之前的final关键字

时间:2013-03-10 06:40:05

标签: java methods parameter-passing final

class hello {
    public static void main(String arg[]){

    int[] c = { 2 };
    final int[] d = { 3 };

    }

static void useArgs(final int a, int b, final int[] c, int[] d) {

    c[0]=d[0]; // no error 
    c = d; //error 
    }
 }
任何人都可以解释这种行为吗?

2 个答案:

答案 0 :(得分:6)

变量c是最终的。这意味着您无法为该变量分配其他值。

但是数组中的元素本身并不是最终的,这就是为什么你能够改变像c[0]=d[0]这样的元素的赋值。

答案 1 :(得分:3)

c是对int数组的最终(const)引用。并且由于c是最终的,你不能改变它的值(即改变它所指的地址)。这适用于声明为final的任何变量(不仅仅是数组)。

这也行不通:

final int c = 1;
int d = 2;
c = 2; // Error
c = d; // Error