•
可见, final
“ ”
只对引用的 值 ( 也即它所指向的那个对象
的内存地址 ) 有效,它迫使引用只能指向初始指向的那
个对象,改变它的指向会导致编译期错误。至于它所指
向的对象的变化, final 是不负责的。这很类似 == 操作
符 :==
“ ”
操作符只负责引用的 值 相等,至于这个地址所
指向的对象内容是否相等, == 操作符是不管的。
•
理解 final 问题有很重要的含义。许多程序漏洞都基
于此 ----final 只能保证引用永远指向固定对象,不能保证
那个对象的状态不变。在多线程的操作中 , 一个对象会
被多个线程共享或修改,一个线程对对象无意识的修改
可能会导致另一个使用此对象的线程崩溃。一个错误的
解决方法就是在此对象新建的时候把它声明为 final ,意
“
”
图使得它 永远不变 。其实那是徒劳的。