這個是我碰到比較多次的問題,一開始是不解,不過查了下大家都覺得沒什麼,而且隻是加個final好像影響也不大,于是我就直接加個final了事,之後也不管了
直到昨天:
遇到了這個宿命般的問題
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iM3MTNycDMzATMtgDNzUDNzQjNxEzMzAjNxAjMtkTN3gDN38CXzAjNxAjMvwVO1cDO0czLcd2bsJ2Lc12bj5ycn9Gbi52YuUTMwIzcldWYtl2Lc9CX6MHc0RHaiojIsJye.png)
難道解決方法是把它換成引用類型?
我去,居然不行,包裝類不能改變值,尼瑪,怎麼會這麼巧
嘿,媽的,那就自己來!自己定義一個類型!
是以這樣直接改成final果然是會遇到問題的,比如我希望它變的時候,最簡單的情況就是一個for循環的i++
于是我很自然去檢視了final的特性,發現有個可以利用的漏洞,那就是對于引用類型final隻是限定了它棧中的位址不能改,而堆中的值可以随便改
于是我馬上想到了int的包裝類,為此我特地好好看了下Intger,結果發現它沒有隻改變值的API!
短暫的挫折過後,我立刻想到了,那還不簡單,自己定義一個類型就好了,比如這樣:
自己定義了一個簡單的類型:
本來以為這個事情就這麼完美結束了,直到我今天查其他資料的時候,看到有人用了這麼一個非常機智的技巧:
這才真是完美!是以有時候還是需要一點機智
具體為什麼要這樣好像比較複雜,暫時跳過:
https://www.zhihu.com/question/21395848