基本類型轉換
- 自動類型轉換
- 強制類型轉換
自動類型轉換
轉換從低級到進階
byte,short,char—> int —> long—> float —> double
資料類型轉換必須滿足如下規則:
- 不能對boolean類型進行類型轉換
- 不能把對象類型轉換成不相關類的對象
- 在把容量大的類型轉換為容量小的類型時必須使用強制類型轉換。
- 轉換過程中可能導緻溢出或損失精度
- 浮點數到整數的轉換是通過舍棄小數得到,而不是四舍五入
public class Test { public static void main(String[] args) { //byte 自動轉換成 short byte abyte = 10; short ashort = abyte; System.out.println(ashort); //short 自動轉換成 int short ashort2 = 180; int aint = ashort2; System.out.println(aint); //int 自動轉換成 long int aint2 = 100; long along = aint2; System.out.println(along); //long 自動轉換成 float long along2 = 100; float afloat = along2; System.out.println(afloat); //float 自動轉換成 double float afloat2 = 100.00F; double adouble = afloat2; System.out.println(adouble); }}//輸出結果:10180100100.0100.0
強制類型轉換
轉換從進階到低級
byte,short,char
public class Test2 { public static void main(String[] args) { //double 強制轉換成 float double adouble = 180.12D; float afloat = (float) adouble; System.out.println(afloat); //float 強制轉換成 long float afloat2 = 180.12f; long along = (long) afloat2; System.out.println(along); //long 強制轉換成 int long along2 = 180; int aint = (int) along2; System.out.println(aint); //int 強制轉換成 short int aint2 = 180; short ashort = (short) aint2; System.out.println(ashort); //short 強制轉換成 byte short ashort2 = 180; byte abyte = (byte) ashort2; System.out.println(abyte); }}//輸出結果:180.12180180180-76
由上述内容可知,強制類型轉換有精度的損失。
//分析byte abyte = (byte) ashort2;精度損失的過程short ashort2 = 180;二進制位 0000 0000 1011 0100 short類型轉換成byte類型精度損失變成8位 原碼: 1011 0100反碼: 1100 1011補碼: 1100 1100再由二進制轉換成十進制為-76
備注:計算中使用的都是補碼。正數的補碼和原碼一樣;負數的補碼是負數的反碼加1。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SYxAjY0EDZzYDO3MGMwQTYkNzM2YTYiRWM4kTOmZTNz8CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
境界有大小,不以是而分優劣。“細雨魚兒出,微風燕子斜”,何遽不若“落日照大旗,馬鳴風蕭蕭”?“寶簾閑挂小銀鈎”,何遽不若“霧失樓台,月迷津渡”也。——王國維