3 回答

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊
編譯時(shí)間常數(shù)必須為:
宣布最終
原始或字符串
在聲明中初始化
用常量表達(dá)式初始化
所以private final int x = getX();
不是恒定的。
第二個(gè)問(wèn)題private int y = 10;
不是恒定的(在這種情況下是非最終的),因此優(yōu)化器無(wú)法確定該值將來(lái)不會(huì)更改。因此,它無(wú)法將其優(yōu)化為恒定值。答案是:不,它與編譯時(shí)間常數(shù)的處理方式不同。

TA貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊
該JLS使得之間的區(qū)別如下final變量和常量:
final 變數(shù)
可以聲明一個(gè)變量final。甲final變量可以僅被分配給一次。如果將final變量賦值給它,則是編譯時(shí)錯(cuò)誤,除非在賦值之前絕對(duì)未賦值(第16節(jié)(確定賦值))。
一旦一個(gè)final變量被分配,它總是包含相同的值。如果final變量持有對(duì)對(duì)象的引用,則可以通過(guò)對(duì)對(duì)象的操作來(lái)更改對(duì)象的狀態(tài),但是變量將始終引用同一對(duì)象。這也適用于數(shù)組,因?yàn)閿?shù)組是對(duì)象。如果final變量持有對(duì)數(shù)組的引用,則可以通過(guò)對(duì)數(shù)組的操作來(lái)更改數(shù)組的組件,但是變量將始終引用同一數(shù)組。
一個(gè)空白的final是一個(gè)final變量,其聲明中缺少一個(gè)初始化。
常數(shù)
甲常量變量是final原始類(lèi)型或類(lèi)型的變量 String,其與一個(gè)常量表達(dá)式(初始化§15.28)。
從這個(gè)定義中,我們可以看出一個(gè)常數(shù)必須是:
宣告 final
原始類(lèi)型或類(lèi)型 String
在其聲明中初始化(不是空白final)
用常量表達(dá)式初始化
編譯時(shí)常量呢?
該JLS不包含短語(yǔ)編譯時(shí)間常數(shù)。但是,程序員經(jīng)常將術(shù)語(yǔ)“ 編譯時(shí)常量”和“ 常量常量”互換使用。
如果final變量不滿足上述標(biāo)準(zhǔn),則該final變量在技術(shù)上應(yīng)稱(chēng)為變量。

TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊
根據(jù)JLS,沒(méi)有要求“常量”應(yīng)該是靜態(tài)的。
因此,“常量”可以是靜態(tài)的也可以是非靜態(tài)的(實(shí)例變量)。
但是JLS對(duì)變量成為“常量變量”(除了只是最終變量)施加了一些其他要求:
僅是字符串或原始
僅初始化為內(nèi)聯(lián),因?yàn)樗亲罱K的,并且不允許空白的最終
用“常量表達(dá)式” =“編譯時(shí)常量表達(dá)式”初始化(請(qǐng)參見(jiàn)下面的JLS引用)
4.12.4。最終變量(JLS)
甲常量變量是原語(yǔ)類(lèi)型的最終變量或輸入與一個(gè)常量表達(dá)式初始化字符串(§15.28) 。
15.28。常數(shù)表達(dá)式
甲編譯時(shí)間常量表達(dá)式是表示原始類(lèi)型或String不突然完成,并且僅使用以下組成的一個(gè)值的表達(dá)式:
基本類(lèi)型的文字和字符串類(lèi)型的文字(§3.10.1,§3.10.2,§3.10.3,§3.10.4,§3.10.5)
強(qiáng)制轉(zhuǎn)換為基本類(lèi)型,強(qiáng)制轉(zhuǎn)換為字符串(第15.16節(jié))
一元運(yùn)算符+,-,?和?。ǖ皇?+或-)(§15.15.3,§15.15.4,§15.15.5,§15.15.6)
乘法運(yùn)算符*,/和%(第15.17節(jié))
加法運(yùn)算符+和-(§15.18)
移位運(yùn)算符<<,>>和>>>(第15.19節(jié))
關(guān)系運(yùn)算符<,<=,>和> =(但不包括instanceof)(第15.20節(jié))
等號(hào)運(yùn)算符==和!=(§15.21)
按位和邏輯運(yùn)算符&,^和| (§15.22)
條件和運(yùn)算符&&和條件或運(yùn)算符|| (§15.23,§15.24)
三元條件運(yùn)算符?:(§15.25)
帶括號(hào)的表達(dá)式(第15.8.5節(jié)),其包含的表達(dá)式是一個(gè)常量表達(dá)式。
引用常量變量(第4.2.4節(jié))的簡(jiǎn)單名稱(chēng)(第6.6.5.6.1節(jié))。
TypeName形式的合格名稱(chēng)(第6.5.6.2節(jié))。引用常量變量的標(biāo)識(shí)符(第4.12.4節(jié))。
添加回答
舉報(bào)