首頁>技術>

一、概述

很多人在面試的時候有可能就會被問到上面這個問題,在java中,a=a+b和a+=b是不是一樣的,相信絕大多數人,第一眼的答案就是一樣的,至少結果上應該是一樣的,但是你冷靜下來想一想呢,這裡面肯定有坑的啊,我們今天就來看一下。

二、程式碼驗證

我們先來看一下a=a+b的情況,程式碼如下:

從圖中可以看出出現了錯誤,根本無法執行。報錯原因我也貼出來了,說是需要byte型別,但是確實int型別,這裡因為a是byte型別,而數字4預設是int 型別。在java中,在a+4時,會進行 自動型別轉換 ,所以a+4 會轉換成int型別。而變數a還是byte型別,將int 型別的a+4賦值給byte型別的a ,無疑會報錯。當然,我們也可以進行強型別轉換,將已經轉換成int型別的a+4強制轉換為byte型別,這樣也是可以的。但是這種轉換可能會導致溢位或者精度的下降,如果容忍可能出現的誤差,可以使用這種轉換。

我們再來看下a+=b的情況呢,程式碼如下:

我們發現結果是正確的,程式也沒毛病。大家需要明確的是“+=”是java中的一個運算子,而不是兩個,所以在運算時 會進行自動型別轉換,也就是低階變數可以直接轉換為高階變數。所以在編譯時沒有報錯。

隱式型別轉換:自動型別轉換,也稱隱式型別轉換,是指不需要書寫程式碼,由系統自動完成的型別轉換。轉換規則為:從儲存範圍小的型別到儲存範圍大的型別。具體規則為: short(char)→int→long→float→double,也就是說int型別的變數可以自動轉換為long型別。

三、結論

總結一下,在兩個變數的資料型別一樣時:a+=b 和a=a+b 是沒有區別的。但是當兩個變數的資料型別不同時,就需要考慮一下資料型別自動轉換的問題了,也就是涉及到精度了。

544

Java

  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 敲了這麼久的程式碼,@Transactional你真會用了嗎