請看兩種代碼
一、
byte a1=1,a2=2,a3,a4;
a3=a1+a2;
a4=1+2;
這段代碼有沒有問題,有問題的話出在第幾行,為什么有問題,怎樣改?
解答:
代碼有問題,原因如下
1. 第2行,a3=a1+a2,Java中,byte short char在計算時將會被轉為int類型,a1+a2這個變量是int類型的,將其賦值給a3必定編譯出錯;
2. 第3行正確,Java有常量優(yōu)化機制,在編譯時已經(jīng)把1+2的結果即3賦給了a4,雖然在java中常量整形的默認數(shù)據(jù)類型是int,浮點形的默認數(shù)據(jù)類型是double,但也可將其賦值給byte short,只是當常量的值在被賦給變量數(shù)據(jù)類型范圍之外時,打印該變量時的結果不對,
(所謂常量優(yōu)化機制,即編譯器在編譯時先判斷表達式右側是否都是常量 如果都是常量則在編譯階段就先將常量的運算結果計算出來 然后直接賦值給左側變量 而不是在運行時再計算賦值)
如
byte test1=128;
System.out.println(test1);
Console輸出:
-128
二、
byte a=1;
a++;
a+=1;
a=a+1;
這段代碼有沒有錯誤,如果有,錯誤在哪里,為什么出錯,怎么改?
答案:
有錯誤,錯誤在第4行
原因:
1.第4行代碼a+1為int類型的變量,將其賦值給a(byte類型)會編譯出錯
2.第2、3行代碼沒有錯誤,a+=1;相當于a=(byte)(a+1);,a++;會自動轉換變量類型