--------------------------------------------------------------------------------------------------
★★自動(隱式、默認)類型轉換與強制(顯式)類型轉換★★
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稱大王。。。)※
