求大神指導這神馬回事呀。。。
public static void main(String[] args) {
???? //short類型變量,內存中2個字節
???? short s = 1;
???? /*
?????? 出現編譯失敗
?????? s和1做運算的時候,1是int類型,s會被提升為int類型
?????? s+1后的結果是int類型,將結果在賦值會short類型時發生錯誤
?????? short內存2個字節,int類型4個字節
?????? 必須將int強制轉成short才能完成賦值
???? */
???? s = s + 1;//編譯失敗
???? s = (short)(s+1);//編譯成功
}
大神,這道題中:s=s+1 里面的1 怎么是int的型的呢??
short 占2個字節,難道1 不止兩個字節有4個字節?那short是短整型還能存啥嘛。。。
2018-12-17
首先,整數值默認 就是int類型,除此之外還有兩種特殊情況:
1.如果直接將較小的整數值(在byte或short類型的表數范圍內)賦給一個byte或short變量,系統會自動把這個整數值當成byte或short類型來處理
2.如果使用一個巨大的整數值(超出了int類型的表數范圍)時,Java不會自動把這個整數值當成long類型來處理,如果希望系統把這個整數值當成long類型來處理,應在這個整數值后增加英文字母l或者L作為后綴。
再分析題主的問題:
short s =1;這時的s是short類型。
s+1時,(s+1)自動轉換為int類型,
所以s=s+1編譯報錯,int類型不能自動轉換為short。
2018-12-04
1被默認為int類型,兩個short型和int不能直接加
2018-12-02
默認的
2018-12-02
這是默認的;
小于32位的變量都按int結果計算;
強制轉換會損失精度;
short不常用,建議用int
2018-12-02
不知道