当使用final修饰基本类型变量时,不能对基本类型变量重新赋值,因此基本类型变量不能被改变。但对于引用类型变量而言,他保存的只是一个引用,final只保证这个引用类型变量所引用的地址不会改变,即一直引用同一个对象,但这个对象完全可以改变。
- import java.util.*;
- class Person
- {
- private int age;
- public Person(){}
- //有参数构造器
- public Person(int age)
- {
- this.age = age;
- }
- //省略age Field的setter和getter方法
- //age Field的setter和getter方法
- public void setAge(int age)
- {
- this.age = age;
- }
- public int getAge()
- {
- return this.age;
- }
- }
- public class FinalReferenceTest
- {
- public static void main(String[] args)
- {
- //final修饰数组变量,iArr是一个引用变量
- final int[] iArr = {5, 6, 12, 9};
- System.out.println(Arrays.toString(iArr));
- //对数组元素进行排序,合法
- Arrays.sort(iArr);
- System.out.println(Arrays.toString(iArr));
- //对数组元素赋值,合法
- iArr[2] = -8;
- System.out.println(Arrays.toString(iArr));
- //下面语句对iArr重新赋值,非法
- //iArr = null;
- //final修饰Person变量,p是一个引用变量
- final Person p = new Person(45);
- //改变Person对象的age Field,合法
- p.setAge(23);
- System.out.println(p.getAge());
- //下面语句对p重新赋值,非法
- //p = null;
- }
- }
复制代码 运行结果:
从上面程序中可以看出,使用final修饰的引用类型变量不能重新赋值,但可以改变引用类型变量所引用的对象内容。
|
|