Java中int和short的轉化
阿新 • • 發佈:2020-09-23
例子[1]:
第一種情況:
short a = 1;
a = a + 1; // 這一步會報錯
System.out.print(a);
編譯器會報錯,原因如下:
第二種情況:
short a = 1;
a += 1;
System.out.print(a);
這種情況不會報錯。
java語言規範中關於複合賦值的解釋是這樣的:E1 op= E2
等價於E1=(T)(E1 op E2)
,這裡的T是E1的資料型別,即複合賦值是自帶了隱式的強制型別轉換的。
第三種情況:
short a = 1;
short b = 1;
short c = a + b;
這種情況依然會編譯出錯,因為Java中存在的型別升級
short
型別的運算也會轉換成int
進行。
型別升級
在Java中,對基本資料型別做比較或者運算時,如果兩邊的資料型別不同,在可以比較的前提下會首先進行型別升級:
- 如果任一方為
double
,則另一方轉換為double
- 否則如果任一方為
float
,則另一方轉換為float
- 否則如果任一方為
long
,則另一方轉換為long
- 否則兩邊都會轉換為
int
- 否則兩邊都會轉換為
- 否則如果任一方為
- 否則如果任一方為
即從高到低分別為double
,float
,long
,int
即使是兩個short
型別運算,也會轉換成int
進行,這就是前面第三種情況出現錯誤的原因。
-
參考https://blog.csdn.net/allenjay11/article/details/78613862