05 JAVA強制類型轉換

簡單的就不說了,說一下易錯點:
也就是下面的第三點

/**
 * 強制類型轉換
 * 1.特點:   代碼需要進行特殊的格式處理,不能自動完成
 * 2.特點:   範圍小的類型 範圍小的變量名 = (範圍小的類型) 範圍大的數據;
 * 注意事項:
 * 1. 強制類型轉換一般不推薦使用,會發生精度丟失,數據溢出
 * 2. byte/short/char都可以發生數學運算,例如"+"
 * 3. byte/short/char在進行計算的時候,首先被提升成爲int類型,再進行計算
 * 4. boolean類型不能發生數據類型轉換
 */
public class Demo02DataType {
    public static void main(String[] args) {
        int num = (int) 100L;
        System.out.println(num);

        int num1 = (int) 6000000000L;
        System.out.println(num1);

        int num2 = (int) 3.14;
        System.out.println(num2);

        // 注意第三點
        byte num3 = 40;
        byte num4 = 50;
        byte result = num3 + num4;
        System.out.println(result);
    }
}
byte num3 = 40;
byte num4 = 50;
byte result = num3 + num4;
System.out.println(result);

我們說過 byte/short/char進行計算,首先會被提升爲 int類型
那麼 num3 + num4 就變成了兩個int類型的數的計算,結果也是int 。
int --> byte,就用到了我們這裏的強制類型轉換。是不能自動觸發的。
tips:
忽略這裏的
byte num3 = 40;
byte num4 = 50;
這種情況。

所以這裏需要修改成
int result = num3 + num4;
或者
byte result = (byte)(num3 + num4);

一般情況下,我們不建議強制類型轉換
所以最優的是
int result = num3 + num4;

注意
注意
注意
有一種情況,編譯器會默認發生強制類型轉換

byte num1 = 30;
num1 += 5.1;
System.out.println(num1); // 35

這實際上是編譯器替我們做了強制類型轉換
num1 = num1 + 5.6;
byte = byte + double;
byte = double + double;
byte = (byte)(double + double);
所以最後的精度被省略,爲35

下面這種情況是強制轉換的數據溢出:
num1 = num1 + 1000;
byte = byte + double;
byte = double + double;
byte = (byte)(double + double);
所以最後的精度被省略,爲35

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章