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稱大王。。。)※


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM