当final修饰变量初始化为一个引用对象时,它的内存地址就指向了引用变量实例的堆地址,且不会改变。因此无论引用变量如何修改,fianl修饰的变量都会随之改变。具体例子如下:
public class myTest {
private static StringBuffer sb=new StringBuffer("blooze");
//为final修饰的变量初始化赋值给sb
private static final StringBuffer fsb=sb;
public static void main(String[] args) {
System.out.println(fsb);
//当sb修改的时候,fsb的值也会随之修改。
sb.append(" is coming to company");
System.out.println(fsb);
}
}
这个是最后输出的结果:
原理图如下: