首先,這關系到java對象中的生命周期的問題。
基礎數據類型和引用變量(不是被引用的對象)做局部變量時(這里是和做為變量成員變量區別,它們作為成員變量后就作為對象的一部分和對象的生命周期相同了);它們的生命中周期是有作用域的,它沒有受生命周期影響這一說,但是同樣在這一作用域創建的對象的生命周期並不受作用域的限制。
局部變量的生命周期與局部內部類的對象的生命周期的不一致。
內部類里面使用外部類的局部變量時,其實就是內部類的對象在使用它,內部類對象生命周期中都可能調用它,而內部類試圖訪問外部方法中的局部變量時,外部方法的局部變量很可能已經不存在了,那么就得延續其生命,拷貝到內部類中,而拷貝會帶來不一致性,從而需要使用final聲明保證一致性。
復制保證生命周期延續,final保證引用一致。
參考資料:
http://lionheartyd.iteye.com/blog/1472407
http://bbs.csdn.net/topics/300068105