2、java資料型別轉換

愛看星星的稻草人發表於2020-08-11

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

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

  1. 特點:程式碼不需要進行特殊處理,自動完成。
  2. 規則:資料範圍從小到大。

        System.out.println(1024); // 這就是一個整數,預設就是int型別
        System.out.println(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 --> float,範圍是float更大一些,符合從小到大的規則
        // 也發生了自動型別轉換
        float num3 = 30L;
        System.out.println(num3); // 30.0            

2、強制型別轉換(顯式)

1. 特點:程式碼需要進行特殊的格式處理,不能自動完成。
2. 格式:範圍小的型別 範圍小的變數名 = (範圍小的型別) 原本範圍大的資料;

注意事項:
1. 強制型別轉換一般不推薦使用,因為有可能發生精度損失、資料溢位。
2. byte / short / char這三種型別都可以發生數學運算,例如加法“+”.
3. byte / short / char這三種型別在運算的時候,都會被首先提升成為int型別,然後再計算。
4. boolean型別不能發生資料型別轉換

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

// double --> int,強制型別轉換
int num3 = (int) 3.99;
System.out.println(num3); // 3,這並不是四捨五入,所有的小數位都會被捨棄掉
        
char zifu1 = 'A'; // 這是一個字元型變數,裡面是大寫字母A
System.out.println(zifu1 + 1); // 66,也就是大寫字母A被當做65進行處理
// 計算機的底層會用一個數字(二進位制)來代表字元A,就是65
// 一旦char型別進行了數學運算,那麼字元就會按照一定的規則翻譯成為一個數字
    
byte num4 = 40; // 注意!右側的數值大小不能超過左側的型別範圍
byte num5 = 50;
// 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

三、數字和字元的對照關係表(編碼表):

ASCII碼錶:American Standard Code for Information Interchange,美國資訊交換標準程式碼。
Unicode碼錶:萬國碼。也是數字和符號的對照關係,開頭0-127部分和ASCII完全一樣,但是從128開始包含有更多字元。

48 - '0'
65 - 'A'
97 - 'a'

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); // 20013

 

相關文章