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
}
}
任何人都可以解释这种行为吗?
答案 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