第二天:資料型別轉換
阿新 • • 發佈:2020-10-18
資料型別轉換
當資料型別不一樣時,將會發生資料型別轉換
-
自動型別轉換(隱式)
-
特點:程式碼不需要進行特殊處理,自動轉換
-
規則:資料範圍從小到大
自動型別轉換 例項
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 } }
-
-
強制型別轉換(顯示)
-
特點:程式碼需要進行特殊格式處理
-
格式:範圍小的型別 範圍小的變數名 = (範圍小的型別)原來範圍的資料型別
注意事項
- 強制型別轉換一般不推薦使用,因為有可能發生精度損失、資料溢位
- byte、short、char這三種類型都可以發生數學運算,例如加法"+"
- byte、short、char這三種類型在運算的時候,都會首先被提升為int型別,然後計算
- boolean型別不能資料型別轉換
- 一旦運算中有不同型別的資料,那麼結果將會是資料範圍大的那種
-
強制型別轉換 例項
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 } }
*
- 數字和字元的對照關係(編碼表)
-
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 } }