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