类中定义一个final修饰的局部变量age为其赋值为18,然后重新赋值为 20
final修饰的局部变量在初始化后不可重新赋值。所以,下面的代码是错误的:
public void method() {
final int age = 18;
age = 20; // 错误,不能重新赋值
}
编译时会报错:
Test.java:3: error: cannot assign a value to final variable age
age = 20;
^
1 error
final修饰的变量初始化后其值不可改变。所以,如果要变更age的值,需要在初始化时赋予一个可变对象,比如:
public void method() {
final int[] age = {18};
age[0] = 20; // 正确,age指向的数组对象本身没有变
}
或者使用非final的引用指向可变对象:
public void method() {
int[] age = {18};
final int[] finalAge = age;
age[0] = 20; // 正确,修饰finalAge的引用,而非数组对象
}
在这两种情况下,通过age数组变更元素的值是允许的,因为final只修饰引用(指针),而实际的对象仍是可变的。
所以,正确的示例代码是:
public void method() {
int[] age = {18};
final int[] finalAge = age;
age[0] = 20;
}
final修饰的变量有以下规则:
final修饰的赋值?final修饰的不能重新赋值