題目:
short s1 = 1; s1 = s1 + 1;
有什麼錯?
short s1 = 1; s1 +=1;
有什麼錯?
此題咋一看,這兩段代碼貌似沒有什麼區別,但是它們的執行結果是不一樣的。
結果是第一段代碼會出錯,第二段代碼不會出錯。
第一段代碼的分析:
這段代碼的第二句(s1=s1+1)就是簡單的兩個數字相加,結果賦值給第一個變量。
此時運算結果的數據類型由以下規則依次決定:
1,如果參與相加運算的表達式或數字有double類型,則結果是double類型
2,如果參與相加運算的表達式或數字有float類型,則結果是float類型
3,如果參與相加運算的表達式或數字有long類型,則結果是long類型
4,如果參與相加運算的表達式或數字沒有以上3中數據類型,則結果是一律是int類型
按照這個規則,s1=s1+1;那麼最終的運算結果應該是int,所以賦值給short類型的s1會出錯。
第二段代碼的分析:
類似於 num1 += num2 這樣的形式的複合賦值表達式,,實際上等同於(num1的類型)(num1+num2),也就是將兩個數相加之後的結果強制轉型爲賦值運算符左邊操作數的數據類型。唯一的不同點就是num1只會計算一次,所以理論上覆合賦值運算符的效率更高。
s1+=1;就會等同與 s1=(short)(s1+1);所以結果是沒問題的。
各位是否明白了這個規則呢?請看以下兩段代碼,您是否能正確的說出答案呢?
下面的代碼輸出什麼值?
short x = 3; x += 4.6; System.out.print(x);
下面的代碼有錯嗎?
int i = 5; long j = 8; i = i + j; i += j;