一 概念介绍
1 当使用final修饰基本数据类型时,不能对其重新赋值,不能被改变。
2 当使用final修饰引用类型变量时,它仅仅保证他的地址不变,即一直引用同一个对象,但这个对象完全可以发生改变。
二 final修饰引用类型变量应用
1 代码示例
import java.util.*;
class Person
{
private int age;
public Person(){}
// 有参数的构造器
public Person(int age)
{
this.age = age;
}
// 省略age的setter和getter方法
// age的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实例变量,合法
p.setAge(23);
System.out.println(p.getAge());
// 下面语句对p重新赋值,非法
// p = null;
}
}
2 运行结果
[5, 6, 12, 9]
[5, 6, 9, 12]
[5, 6, -8, 12]
23
3 结果分析
使用final修饰的引用不能被重新赋值,但可以改变引用类型所引用对象的内容。