複合指派操作符有:+=、-=、*=、/=、%=、 <<=、 >>=、 >>>=、&=、 ^=和| = ;
簡單指派操作符為= ;
如下所示代碼:
輸出結果:
結果分析:
上述代碼使用的均為複合指派操作符。java 語言規範中講到,複合指派 e1 op= e2 等價于簡單指派 e1 =(t)((e1)op(e2)),其中 t 是 e1 的類型,除非 e1 隻被計算一次。換句話說,複合指派表達式自動地将它們所執行的計算的結果轉型為其左側變量的類型。如果結果的類型與該變量的類型相同,那麼這個轉型不會造成任何影響。然而,如果結果的類型比該變量的類型要寬,那麼複合指派操作符将悄悄地執行一個窄化原始類型轉換。
在上述代碼中,指派1的結果為int,int 類型的數值123457 對于左操作數類型short來說太大了,自動産生的轉型悄悄地把 int 數值的高兩位給截掉了,剩下的低16位結果就是就是-7615。
再有如下代碼:
這裡的結果和大家想象的一樣,但是和原書的結果并不一緻(對應原書謎題10:八兩)。部落客測試是在jdk1.7上進行的,而原書是在jdk1.5上進行的。書中提到的指派3不能正确編譯的問題已經被解決了。
(注:本【java解惑】系列,均是部落客閱讀《java解惑》原書後,将原書上的講解和例子部分改編,然後寫成博文進行釋出的。所有例子均親自測試通過,并共享在github上。通過這些例子,激勵自己,惠及他人。同時,本系列所有博文會同步釋出在部落客個人微信公衆号(搜尋“愛題猿”或者“ape_it”),友善大家閱讀。如果文中有任何侵犯原作者權利的内容,請及時告知部落客,以便及時删除;如果讀者對文中的内容有異議或者問題,歡迎通過部落格留言或者微信公衆号留言等方式共同探讨。)
源代碼位址:https://github.com/rocwinger/java-disabuse