1. 程式人生 > 實用技巧 >第二天:資料型別轉換

第二天:資料型別轉換

資料型別轉換

當資料型別不一樣時,將會發生資料型別轉換

  1. 自動型別轉換(隱式)

    • 特點:程式碼不需要進行特殊處理,自動轉換

    • 規則:資料範圍從小到大

    自動型別轉換 例項

    public class Demo01DataType {
        public static void main(String[] args) {
            System.out.println(1024); // 1024 這是一個整數,預設是int型別
            System.out.println(3.14); // 3.14 這是一個浮點數,預設是double型別
    
            // 左邊是long型別,右邊是預設的int型別,左右不一樣
            // 一個等號代表賦值,將右邊的int常量,交給左側的long變數進行儲存
            // int --> long,符合了資料範圍從小到大的要求
            // 這一行程式碼發生自動型別轉換
            long num1 = 100;
            System.out.println(num1); // 100
    
            // 左邊是double型別,右邊是float型別,左右不一樣
            // float --> double,符合從小到大規則
            // 也發生自動型別轉換
            double num2 = 2.5F;
            System.out.println(num2); // 2.5
    
            // 左邊是float型別,右邊是long型別,左右不一樣
            //   long --> double,範圍是float更大一些,符合從小到大的規則
            //   也發生了自動型別轉換
            float num3 = 30L;
            System.out.println(num3); // 30.0
        }
    }
    
  2. 強制型別轉換(顯示)

    • 特點:程式碼需要進行特殊格式處理

    • 格式:範圍小的型別 範圍小的變數名 = (範圍小的型別)原來範圍的資料型別

    注意事項

    1. 強制型別轉換一般不推薦使用,因為有可能發生精度損失、資料溢位
    2. byte、short、char這三種類型都可以發生數學運算,例如加法"+"
    3. byte、short、char這三種類型在運算的時候,都會首先被提升為int型別,然後計算
    4. boolean型別不能資料型別轉換
    5. 一旦運算中有不同型別的資料,那麼結果將會是資料範圍大的那種

強制型別轉換 例項

public class Demo02DataType {
    public static void main(String[] args) {
        // 左邊是int型別,右邊是long型別,不一樣
        // long --> int,不是從小到大
        // 不能發生自動型別轉換
        // int num = 100L;
        // 格式:範圍小的型別 範圍小的變數名 = (範圍小的型別)原本範圍的資料型別
        int num = (int) 100L;
        System.out.println(num); // 100

        // long強制型別轉換為int型別
        int num2 = (int) 6000000000L;
        System.out.println(num2); // 1705032704 資料溢位

        // double --> int
        int num3 = (int) 3.99;
        System.out.println(num3); // 3 精度損失(並不是四捨五入)

        // 中-->20013 國-->22269
        char zifi1 = 'A'; // 這是一個字元變數,裡面是大寫字母A
        System.out.println(zifi1 + 1); // 66
        // 計算機的底層會用一個數字(二進位制),來代表字元A,就是65
        // 一旦char型別進行數學運算,那麼字元就會按照一定的規則翻譯成一個數字

        byte num4 = 40; // 注意:右側的數值大小超過左側的類型範圍
        byte num5 = 50;
        // byte result1 = num4 + num5;
        // byte + byte --> int + int -->int
        int result1 = num4 + num5;
        System.out.println(result1); // 90

        short num6 = 60;
        // byte + short -->int + int -->int
        // int強制轉換為short;注意必須保證邏輯上真是大小本來就沒有超過short範圍,否則會發生資料溢位
        short result2 = (short)(num4 + num6);
        System.out.println(result2); // 100
    }
}
* 
  1. 數字和字元的對照關係(編碼表)
    • ASCII 碼錶,American Standard Code for Interchange,美國資訊交換標準程式碼

    • Unicode碼錶:萬國碼,也是數字和字元對照關係,開頭0~127部分和ASCII完全一樣,但是從128開始包含有更多字元

      • 48 --> 0 65 --> A 97 --> a

數字和字元的對照關係 例項

public class Demo03DataTypeChar {
    public static void main(String[] args) {
        char zifu1 = '1';
        System.out.println(zifu1 + 0); // 49

        char zifu2 = 'A'; // 其實底層儲存的是65數字

        char zifu3 = 'c';
        // 左側是int型別,右側是char型別
        // char --> int,確實是從小到大
        // 發生自動型別轉換
        int num = zifu3;
        System.out.println(num); // 99

        char zifu4 = '中'; // 正確寫法
        System.out.println(zifu4 + 0); // 2013
    }
}