background image

可见, final

“ ”

只对引用的 值 ( 也即它所指向的那个对象

的内存地址 ) 有效,它迫使引用只能指向初始指向的那

个对象,改变它的指向会导致编译期错误。至于它所指

向的对象的变化, final 是不负责的。这很类似 == 操作

符 :==

“ ”

操作符只负责引用的 值 相等,至于这个地址所

指向的对象内容是否相等, == 操作符是不管的。

  理解 final 问题有很重要的含义。许多程序漏洞都基

于此 ----final 只能保证引用永远指向固定对象,不能保证

那个对象的状态不变。在多线程的操作中 , 一个对象会

被多个线程共享或修改,一个线程对对象无意识的修改

可能会导致另一个使用此对象的线程崩溃。一个错误的

解决方法就是在此对象新建的时候把它声明为 final ,意

图使得它 永远不变 。其实那是徒劳的。