类中定义一个final修饰的局部变量age为其赋值为18,然后重新赋值为 20

类中定义一个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修饰的变量有以下规则:

  1. 必须在定义时初始化
  2. 一旦初始化后,其值不可改变
  3. 可以修饰基本类型变量或引用
  4. 当修饰引用时,引用的值(地址)不可改变,但对象本身可变

final修饰的赋值?final修饰的不能重新赋值