當前位置:
首頁 > 知識 > Java為什麼對常量的修改沒有生效?

Java為什麼對常量的修改沒有生效?

寫這篇文章的起因是前幾天同事改了一個常量類中的提示,發布到測試環境後沒有生效,正好看 《Java 解惑(謎題 93: 類的戰爭)》 提到了這個問題,所以寫篇文章記錄一下。

以下均使用命令行進行演示,至於為什麼沒有使用 IDE 後面會提到。

先看一個簡單的 Contants 類:

Java為什麼對常量的修改沒有生效?

再看下 Solution 類:

Java為什麼對常量的修改沒有生效?

編譯,運行 Solution 的主函數,毫無疑問結果如圖:

Java為什麼對常量的修改沒有生效?

現在我們把 Constants 類修改為:

Java為什麼對常量的修改沒有生效?

重新編譯 Constants 類,再運行 Solution 的主函數,輸出結果如圖:

Java為什麼對常量的修改沒有生效?

為什麼修改沒有生效?是 Constants 類的問題,還是 Solution 類的問題?

我們先反編譯 Constants 類看看:

Java為什麼對常量的修改沒有生效?

由上圖可見,對 Constants 類的修改是生效的。

再看反編譯的 Solution 類:

Java為什麼對常量的修改沒有生效?

看到這裡,原因也就明確了,常量變數會被編譯進那些引用它們的類中。這和筆者同事前幾日遇到的情況一模一樣,同事在本地開發時修改了常量類中的常量欄位的值,本地是生效的,原因是因為本地開發使用了 IDE,而 IDE 將引用到常量類的類也重新編譯了,所以能看到最新的值,而在發布到測試環境的過程中,打包機使用增量編譯,只是重新編譯了源代碼被更改過的類,未將引用常量的類重新編譯,所以當時看見的是更改前的值,同事將常量類的 class 文件反編譯後看見的也是修改後的值,但是卻忘了看引用該常量類的類,所以當時沒有發現這個問題。


學習Java的同學注意了!!!

學習過程中遇到什麼問題或者想獲取學習資源的話,歡迎加入Java學習交流群495273252,我們一起學Java!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Java團長 的精彩文章:

每天一道Java題(3)

TAG:Java團長 |

您可能感興趣

蘋果新規則開始生效,不知這樣的iphone你還會喜歡嗎?
Google Play反挖礦政策或並未生效
紅色預警生效,他們為了喬丹可以群毆,為了Supreme可以瘋狂,真的值嗎?
不歡而散,Raf Simons離任Calvin Klein,立即生效
怎麼檢查/GA/Google tag manager是否已經生效
GDPR生效,數據可攜權和被遺忘權,你怎麼看?
中國造被亞馬遜召回,存在安全隱患?亞馬遜新規即將生效,這些品類的賣家要修改listing?
詳解Github的.gitignore忽略文件+.gitignore不生效解決+生產配置
谷歌 Dropout 專利生效,AI 圈內人表示坐不住了!
eBay更改Premium Service標籤獲得標準,7月1日生效
谷歌 Dropout 專利生效,AI 圈內人表示坐不住了
美對Apple Watch、AirPods等征的關稅開始生效
GDPR等監管法規陸續生效,Facebook與谷歌受到嚴重影響
萬萬沒想到,谷歌給Dropout申請了專利,而且剛剛生效
憑什麼!憑什麼他們的原生效果能做這麼好?——IT行業原生案例大禮包
Nature子刊兩聯發:重磅揭秘抗癌基因生效的關鍵因素!
Intel推出10nm 3D新CPU架構,讓失效的摩爾定律再次生效!
「吸引力法則」為何沒有生效?
庫克終於低頭,蘋果新規3月正式生效,老iPhone或「復活」?
常吃大蒜養生效果好,但醫生卻說:3類人要忌口,多吃對身體不利