10.16 什麼?"i=i+j“和”i+=j"居然不一樣!

在我們學習Java基礎中運算符部分的時候,肯定都碰到了一種說法!很多教科書和老師都告訴我們,"i+=j"是"i=i+j"的一種簡寫而已,換句話說,其實"i+=j"就等於"i=i+j",它們是一樣的。然而它們真的完全一樣嗎?我的答案是,不一樣!不信?那麼請看下面的示例:


我們定義了兩個變量:int i=1; byte j=2;我們先寫第一句吧:

什麼?

沒問題對不?那麼好,我們接著寫下一句:

什麼?

啊哦!怎麼寫成"i=i+j"就報錯了呢??說好的跟"i+=j"一樣呢?哪去了?

想必大家都已經看出來錯誤在哪裡了吧。對的,當" i "(byte類型)與" j "(int 類型)相加的時候,會對" i "進行隱式類型轉換,使其變成"int"類型再與" j "相加,結果自然是"int"類型的。然而再將結果賦值給" i "時,卻不行了,因為當把高精度類型(這裡指int)的變量的值賦給低精度類型(這裡指byte)的變量時,必須使用顯示類型轉換(又稱強制類型轉換)。所以它報錯了!

換成這樣就不會錯了!如圖:

什麼?

那你們就要問了吧,怎麼"i+=j"就不會報錯呢?OK!其實真相是這樣的:

什麼?

換句話說,寫成"i+=j;"時,它會默認帶上了強制類型轉換,轉換後的類型默認與" i "一致。但是寫成"i=i+j;"時並沒有默認有強制類型轉換了,需要我們顯式地去寫出來。這也就是為什麼它們一個報錯,一個不報錯的原因了。看到這裡,你還會認為"i+=j;"僅僅是"i=i+j;"的簡寫了嗎?不會了吧!它們其實並不是一樣的,而區別就在於一個帶了強制類型轉換,而另一個沒有!


所以,以後千萬不要簡單地說,"i+=j"與"i=i+j"是完全一樣的!這種理解和說法是不嚴謹的哦!

什麼?


分享到:


相關文章: