許多程式設計語言都有自己的辦法告訴編譯器某個資料是“常數”。常數主要應用於下述兩個方面:
1)編譯期常數,它永遠不會改變;
2)在執行期間初始化的一個值,我們不希望它發生變化。ss
對於編譯期的常數,編譯器(程式)可將常數值“封裝”到需要的計算過程裡。也就是說,計算可在編譯期間提前執行,從而節省執行時的一些開銷。在Java 中,這些形式的常數必須屬於基本資料型別(Primitives),而且要用final 關鍵字進行表達。
無論static 還是final 欄位,都只能儲存一個資料,而且不得改變。
若隨同物件控制程式碼使用final,而不是基本資料型別,它的含義就稍微讓人有點兒迷糊了。對於基本資料型別,final 會將值變成一個常數;但對於物件控制程式碼,final 會將控制程式碼變成一個常數。進行宣告時,必須將控制程式碼初始化到一個具體的物件。而且永遠不能將控制程式碼變成指向另一個物件。然而,物件本身是可以修改的。Java對此未提供任何手段,可將一個物件直接變成一個常數。