2 回答

TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
與許多情況一樣,這可以在Java 語(yǔ)言規(guī)范 § 5.2中找到:
此外,如果表達(dá)式是、、或 類(lèi)型的常量表達(dá)式(第 15.28 節(jié)):
byte
short
char
int
如果變量的類(lèi)型為 、 或 ,并且常量表達(dá)式的值可以用變量的類(lèi)型表示,則可以使用縮小基
byte
元short
轉(zhuǎn)換char
。
這意味著編譯器首先擴(kuò)大到int
目標(biāo)類(lèi)型,然后縮小到目標(biāo)類(lèi)型,因?yàn)?66 確實(shí)可以在目標(biāo)類(lèi)型(即字節(jié))中表示。
請(qǐng)注意,這僅適用于常量表達(dá)式。例如,以下代碼會(huì)產(chǎn)生編譯時(shí)錯(cuò)誤:
static int get() {
? ? return 10;
}
public static final main(String[] args) {
? ? byte var1 = 56 + get();
}

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個(gè)贊
這沒(méi)關(guān)系,因?yàn)槟闾峁┑氖呛愣ǖ膬r(jià)值。
常量的編譯時(shí)縮小意味著諸如以下的代碼:
字節(jié)答案 = 42;
被允許。如果沒(méi)有縮小范圍,整數(shù)文字 42 具有 int 類(lèi)型這一事實(shí)意味著需要強(qiáng)制轉(zhuǎn)換為 byte:
字節(jié)答案 = (字節(jié)) 42;?// 允許強(qiáng)制轉(zhuǎn)換,但不是必需的
添加回答
舉報(bào)