对于对象引用,final使引用恒定不变。一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象。然后对象自身却是可以被修改的。比如:
class Value
{
int i;
public Value(int i){this.i=i;}
}
public class FinalData
{
private Value v1=new Value(8);
private final Value v2=new Value(11);
public static void main(String[] args)
{
FinalData fd=new FinalData();
fd.v1.i++; //可以,因为v1可以改变
fd.v2.i++; //可以,对象本身可以改变
fd.v1=new Value(12); //可以,因为不是final
fd.v2=new Value(15); //错误!因为v2是final,引用恒定不变
}