short s1 = 1; s1 = s1 + 1;有错而short s1 = 1; s1 += 1正确
這個問題以前碰到過,也研究過,發表一下:
??? 如果你認為表達式(x += i)只是表達式(x = x + i)的簡寫方式,這并不準確。這兩個表達式都被稱為賦值表達式。第二個表達式使用的是簡單賦值操作符(=),而第一個表達式使用的是復合賦值操作符。Java語言規范中講到,復合賦值(E1?op=E2)等價于簡單賦值(E1=(T)((E1) op (E2))),其中T是E1的類型,除非E1只被計算一次。
??? 換句話說,復合賦值表達式自動地將所執行計算的結果轉型為其左側變量的類型。如果結果的類型與該變量的類型相同,那么這個轉型不會造成任何影響。然而,如果結果的類型比該變量的類型要寬,那么復合賦值操作符將悄悄地執行一個窄化原生類型轉換。
??? 因此,復合賦值表達式可能是危險的。為了避免這種令人不快的突襲,請不要將復合賦值操作符作用于byte、short或char類型的變量。?
因為S1是short型的,占2個字節,而1是int型的,占4個字節。在兩個類型的值相加的時候,會發生自動類型的提升。也就是說s1+1后,其結果是int型的,而不是short型的,所以可以想想看,把4個字節的東西放在兩個字節的空間里,肯定編譯不通過。???
????? 后面的那個不會發生類型的提升,JAVA規范上說???? e1+=e2???? 實際上是???? e1=(T1)(e1+e2),其中T1是e1的數據類型。???s1+=1等效于???s1=(short)(s1+1),所以是正確的。
轉載于:https://www.cnblogs.com/toSeeMyDream/p/5537741.html
總結
以上是生活随笔為你收集整理的short s1 = 1; s1 = s1 + 1;有错而short s1 = 1; s1 += 1正确的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 女性个性签名大全励志
- 下一篇: 真皮座椅多少钱啊?