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