本文轉載自:http://tanlan.blog.51cto.com/3450625/1575936
題目:
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;
新聞熱點
疑難解答