07.型別轉換、基本型別常見錯誤、Scanner獲取鍵盤輸入
阿新 • • 發佈:2021-10-14
自動型別轉換
自動型別轉換指的是容量小的資料型別可以自動轉換為容量大的資料型別。
如圖:
其中,實線表示無資料丟失的自動型別轉換,而虛線表示在轉換時可能會有精度的丟失。
注意點:
整型常量可以直接賦值給 byte、short、char 等型別變數,而不需要進行強制型別轉換,只要不超出其表數範圍即可。
程式碼示例:
// 測試型別自動轉換 public class TestTypeConvert { public static void main(String[] args) { int a = 324; // 編譯正確 long b = a; // 編譯正確,在表數範圍內,int 型別可以直接轉為 long 型別,在表數範圍內 double d = b; // 編譯正確,long 型別的 b 可以把 324 這個值傳給 double 型別的 d。 a = b; // 報錯,long 型別不能賦值給 int 型別 long e = 3.23F; // 報錯,float 型別表數範圍比 long 型別大 // 特例 byte b2 = 123; // 123 在 byte 的表數範圍之內 } }
強制型別轉換
強制型別轉換,又被稱為造型,用於顯式的轉換一個數值的型別。
在有可能丟失資訊的情況下進行的轉換是通過造型來完成的,但可能造成精度降低或溢位。
語法格式
(type)var
運算子 “()” 中的 type 表示要轉換的型別名稱,如 int、double
程式碼示例:強制型別轉換
// 強制型別轉換 public class TestTypeConvert { public static void main(String[] args) { double x = 3.14; int nx = (int)x; // 轉換後的值為 3 char y = 'a'; int z = y + 1; // 字元型資料遇到數字相加,會變成對應數字 System.out.println(nx); // 結果為 3 System.out.println(z); // 結果為 98 System.out.println((char)z); // 結果為 b } }
基本資料型別常見錯誤
注意點
- 強制型別轉換去操作比較大的數時,需要留意是否溢位。
- 不要命名名稱為 l 的變數,l 容易與 1 混淆。
- long 型別使用大寫 L,別用小寫。
程式碼示例
// 基本資料型別運算常見錯誤 public class TestTypeConvert { public static void main(String[] args) { int money = 1000000000; // 10億 int years = 20; // 返回的 total 是負數,因為超過了 int 的表數範圍 int total = money * years; System.out.println("total="+total); // total=-1474836480 // 返回的 total 仍然是負數。預設是 int,因此會轉成 int 值,再轉成 long。 long total1 = money * years; // 先進行了運算,再進行賦值,所以賦值的資料是已經損壞的資料 System.out.println("total1="+total1); // total1=-1474836480 // 返回的 total2 正確:因為先將一個因子變成 long,整個表示式發生了提升,全部用 long 來計算。 long total2 = money * ((long)years); // 先進行 long 型別轉換,再進行運算操作,運算操作後的結果就為 long 型別,不會損壞。 System.out.println("total2="+total2); // total2=20000000000 // 直接在運算運算元上進行 long 型別定義,防止資料丟失 long total3 = 34L * years * 3223 * 545786; System.out.println("total3="+total3); // total3=1196166429040 } }
Scanner獲取鍵盤輸入
程式碼示例
// 測試 Scanner 獲取鍵盤輸入
import java.util.Scanner; // Scanner 是系統預設之外的類,需要匯入
public class TestScanner {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // new 一個 Scanner 類物件
System.out.println("請輸入名字:");
String name = scanner.nextLine(); // 定義變數,通過 nextLine() 來獲取上一步輸入的一行資料
System.out.println("請輸入你的愛好:");
String like = scanner.nextLine(); // 定義變數,通過 nextLine() 來獲取上一步輸入的一行資料
System.out.println("請輸入年齡:"); // 輸入年齡為整數,則使用 nextInt() 去接收資料
int age = scanner.nextInt(); // 使用 nextInt() 去接收整型資料
// 輸出變數結果
System.out.println("輸出最終結果:######");
System.out.println(name);
System.out.println(like);
System.out.println(age);
System.out.println("來到地球的天數:"+age * 365);
System.out.println("剩餘待在地球的天數:"+(85 - age) * 365);
}
}