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類型的變量。 

由於S1short型的,佔2個字節,而1是int型的,佔4個字節。在兩個類型的值相加的時候,會發生自動類型的提高。也就是說s1+1後,其結果是int型的,而不是short型的,因此能夠想一想看,把4個字節的東西放在兩個字節的空間裏,確定編譯不經過。   
     後面的那個不會發生類型的提高,JAVA規範上說    e1+=e2    其實是    e1=(T1)(e1+e2),其中T1是e1的數據類型。   s1+=1等效於   s1=(short)(s1+1),因此是正確的。html

轉載:http://hi.baidu.com/lifa868/blog/item/b7c05b2bc6a97a91023bf6f3.html#  _腳步淩亂post

 
分類:  Java
相關文章
相關標籤/搜索