1. 程式人生 > 其它 >Java中byte、short、char、int、long運算時自動型別轉化問題

Java中byte、short、char、int、long運算時自動型別轉化問題

--------------------------------------------------------------------------------------------------

★★自動(隱式、預設)型別轉換與強制(顯式)型別轉換★★

  1) boolean型別不參與轉換
  2) 預設轉換
    A:從小到大
    B:byte,short,char --» int --» long --» float --» double
    C:byte,short,char之間不相互轉換,直接轉成int型別參與運算。
  3) 強制轉換
    A:從大到小
    B:可能會有精度的損失,一般不建議這樣使用。
    C:格式:
      目標資料型別 變數名 = (目標資料型別) (被轉換的資料);

★★表示式的式值★★

int a = 10;

int b = 20;

int c = (a = b); //賦值式本身也是表示式,所以它也有式值!!!

--------------------------------------------------------------------------------------------------

大家都知道,在進行運算時,Java會隱式的自動進行型別轉化。那麼有哪些情況會進行轉化呢?總結如下:

(一)算術運算子

1) 單目運算子:+(取正)、-(取負)、 ++(自增1)、 --(自減1)

a) +(取正)、-(取負)

    當運算元是byte,short,char時,會自動轉化為int型別;返回結果為int。

    當運算元是int,long時,不轉化,原來是啥型別,還是啥型別。

b) ++(自增1)、 --(自減1)

    不管運算元是啥型別,不轉化。

2) 雙目運算子:+、 -、 *、 /、 %(取餘)

    當兩個運算元中沒有long型別時,兩個運算元中非int型別會先自動轉換為int型別,再參與運算,返回結果為int;

    當兩個運算元中含有long型別時,兩個運算元中非long型別會自動轉換為long型別,再參與運算,返回結果為long;

(二)位運算子

1) &(按位與)、|(按位或)、^(按位異或)

    當兩個運算元中沒有long型別時,兩個運算元中非int型別會先自動轉換為int型別,再參與運算,返回結果為int;

    當兩個運算元中含有long型別時,兩個運算元中非long型別會自動轉換為long型別,再參與運算,返回結果為long;

2) ~(按位非)

    當運算元是byte,short,char時,會自動轉化為int型別;返回結果為int。

    當運算元是int,long時,不轉化,原來是啥型別,還是啥型別。

3) << (帶符號左移)、 >>(帶符號右移)、 >>> (無符號右移)

    當運算元是byte,short,char時,會自動轉化為int型別;返回結果為int。

    當運算元是int,long時,不轉化,原來是啥型別,還是啥型別。

(三)賦值運算子

1) 基本賦值運算子:=

    a) 變數 = 變數:小賦大,自動轉;大賦小,不自動轉換;

    b) 變數 = 常量:不自動型別轉換

2) 擴充套件賦值運算子:+=、-=、*=、/=、%=

    這裡需要特別說明一下,擴充套件賦值運算子隱含了強制型別轉換,即: ※※s += 1 等價於 s = (s的資料型別)(s + 1)※※

★★總結★★

※除了自增和自減不進行轉化外,其它情況都是無long型時,所有非int型別轉成int型別;有long型別時,都轉成long型別(簡稱:運算中無long,int稱大王。。。)※