提升意味著將較小的類型文字提升或轉換為較高的類型。此提升用于評估表達式。現在我對此有疑問。當我輸入這個語句時byte var1 = 56 + 10;給出答案 66。這怎么可能?根據提升規則,每個 byte、short 和 char 都會提升為 int。所以這個 56 和 10 將被提升為 int,因此答案 66 將是 int。然后這個 66 將被存儲在字節類型的變量中。然而,要將某些內容從 int 存儲到 byte,則需要進行強制轉換。但這段代碼無需強制轉換即可完美運行。
2 回答

婷婷同學_
TA貢獻1844條經驗 獲得超8個贊
與許多情況一樣,這可以在Java 語言規范 § 5.2中找到:
此外,如果表達式是、、或 類型的常量表達式(第 15.28 節):
byte
short
char
int
如果變量的類型為 、 或 ,并且常量表達式的值可以用變量的類型表示,則可以使用縮小基
byte
元short
轉換char
。
這意味著編譯器首先擴大到int
目標類型,然后縮小到目標類型,因為 66 確實可以在目標類型(即字節)中表示。
請注意,這僅適用于常量表達式。例如,以下代碼會產生編譯時錯誤:
static int get() {
? ? return 10;
}
public static final main(String[] args) {
? ? byte var1 = 56 + get();
}

慕桂英4014372
TA貢獻1871條經驗 獲得超13個贊
這沒關系,因為你提供的是恒定的價值。
常量的編譯時縮小意味著諸如以下的代碼:
字節答案 = 42;
被允許。如果沒有縮小范圍,整數文字 42 具有 int 類型這一事實意味著需要強制轉換為 byte:
字節答案 = (字節) 42;?// 允許強制轉換,但不是必需的
添加回答
舉報
0/150
提交
取消