| 類型 | 位數 | 範圍 / 說明 |
|---|---|---|
| byte | 8-bit | -128 ~ 127 |
| short | 16-bit | -32,768 ~ 32,767 |
| int | 32-bit | -2^31 ~ 2^31-1 |
| long | 64-bit | -2^63 ~ 2^63-1 |
| float | 32-bit | IEEE 754 單精度 |
| double | 64-bit | IEEE 754 雙精度 |
| char | 16-bit | Unicode 0 ~ 65,535 |
| boolean | — | true / false |
註:Java 無 unsigned 類型;char 本質是無符號整數。
從低精度向高精度:byte/short/char → int → long → float → double
byte b = 10;
int i = b; // 自動提升
double d = b; // 自動提升
特例:char 轉 int 會得到 Unicode 碼值(如 'c' → 99)。byte/short/char 之間不直接自動轉換,需強轉。
高精度 → 低精度,可能丟失精度或溢出:
int i = 200;
byte b = (byte) i; // -56(溢出)
double d = 3.14;
int i2 = (int) d; // 3(截斷小數)
每種基本類型對應一個包裝類:Byte, Short, Integer, Long, Float, Double, Character, Boolean。
// 基本類型 → 包裝類(自動裝箱)
Integer obj = 100;
// 包裝類 → 其他基本類型
double d = obj.doubleValue();
int i = obj.intValue();
// 靜態工廠方法
Integer.valueOf(100); // 推薦,有緩存
new Integer(100); // 不推薦,已棄用
String.valueOf(obj)(通用,null 安全)obj.toString()(需對象非 null)基本類型 + ""(簡潔但生成 StringBuilder)Integer.toString(100)int i = Integer.parseInt("100"); // 基本類型
Integer obj = Integer.valueOf("100"); // 包裝類
double d = Double.parseDouble("3.14");
boolean b = Boolean.parseBoolean("true");
異常處理:格式錯誤拋 NumberFormatException,建議捕獲或預校驗。
char c = '5';
int val = Character.getNumericValue(c); // 5
int val2 = c - '0'; // 5(僅限 0-9)
Date date = new Date();
long ts = date.getTime(); // Date → long
Date date2 = new Date(ts); // long → Date
使用 Calendar 或 Java 8 LocalDateTime:
// 獲取年月日
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int day = cal.get(Calendar.DAY_OF_MONTH);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = sdf.format(date); // Date → String
Date parsed = sdf.parse(str); // String → Date(拋 ParseException)
線程安全:SimpleDateFormat 非線程安全,建議用 ThreadLocal 或 Java 8 DateTimeFormatter。
float/double,請用 BigDecimal。Integer obj = null; int i = obj; 拋 NPE,判空後再拆箱。Integer.parseInt("1.0") 拋異常,先驗證格式。SimpleDateFormat 實例。LocalDate, LocalDateTime, Instant, DateTimeFormatter 更現代、線程安全。Java 類型轉換看似基礎,實則暗藏許多陷阱。掌握「自動提升、強制轉換、包裝類中介、字符串解析、日期格式化」五大核心場景,並遵循最佳實踐,能讓代碼更健壯、可維護。