【考题题干】在下面程序标明的位置处插入哪条语句会导致编译错误?
public class FinalUse {
public static void main(String[] args) {
int x = 0;
final int y = 1;
int[] z = { 2 };
final int[] n = { 3 };
Use(x, y, z, n);
}
static void Use(final int x, int y, final int[] z, int[] n) {
// 插入内容
}
}
请考虑下面的选项:
A.x++
B.y++
C.y=x
D.z[0]++
E.n[0]++
F.z=n
做空白最终变量,也可以当作常量。即在对其赋值之前(例如方法调用之前),该变量为空(为初始化),
赋值之后,在该变量的生存周期内只能调用再也 不能改变变量的值。 final 变量只可以被赋值一次。在方
法调用时,final 形式参数被赋予实际参数的值。在方法内部,不能对 final 参数进行重新赋值或者是修
改。
在 Use 方法中,x 是 final 类型的,因此 A 选项中 x++表示是可以改变 x 的值的,所以 A 会导致编
译错误。y,n[0]是 int 变量,所以 y, n[0]值是可以变化的,因此插入 B 和 E 选项都会编译通过的。C 选
项是把 x 的值赋给 y,改变是 y 的内容,不会改变 x 的值,所以插入 C 选项会编译通过的。在 D 选项中,
由于 z 是个 int 型数组,它是属于复合类型,在进行值传递的时候,传给形参的是地址值,而不是内容,
因此 final int[] z 就表示 z 数组不能在指向其他的数组对象,但是 z 数组中的内容是可以改变的,因此 z
[0]++表示的是内容上的改变,所以是没有错误的,可以编译通过的。F 选项正好与 D 选项相反,同理,
F 就是错误的。
【参考答案】AF