Java 將 byte、short、char、int、long、float、double 視為同類數據,按精度從低到高排列。自動類型提升(低→高)無需特殊語法:
byte b = 10;
int i = b; // 自動提升
強制類型轉換(高→低)需显式轉型,可能導致精度損失或溢位:
int i = 200;
byte b = (byte) i; // 結果為 -56,發生溢位
建議:避免不必要的窄化轉換;若必須轉換,先檢查數值範圍。
六大包裝類別對應基本類型:
| 基本類型 | 包裝類別 |
|---|---|
| boolean | Boolean |
| char | Character |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
String 和 Date 本身即為類別,無包裝類別概念。
Integer obj = new Integer(100); // 構造函數(已棄用)
Integer obj = Integer.valueOf(100); // 推薦:靜態工廠方法
int val = obj.intValue(); // 通用方法
// 數值型包裝類別還提供:
double d = obj.doubleValue();
float f = obj.floatValue();
JDK 5+ 支援自動裝箱/拆箱,編譯器自動插入轉換碼。
Integer i = Integer.valueOf("123"); // 推薦
Double d = Double.parseDouble("3.14"); // 直接得基本類型
String s = String.valueOf(123); // 通用靜態方法
String s = Integer.toString(123);
String hex = Integer.toHexString(255); // "ff"
String bin = Integer.toBinaryString(10); // "1010"
char c = "Hello".charAt(0); // 'H'
char[] arr = "Hello".toCharArray(); // ['H','e','l','l','o']
區分兩種語意:
'1' → 49(直接賦值給 int)'1' → 1(使用 Character.getNumericValue('1'))Date d = new Date(2024-1900, 5, 15); // 年月日(月份 0-based)
Date d = new Date(2024-1900, 5, 15, 14, 30, 0); // 含時分秒
Date d = new Date(System.currentTimeMillis());
long ms = d.getTime(); // 取得毫秒數
String s = d.toString(); // 預設格式
// 生產環境建議使用 SimpleDateFormat 或 java.time 套件
valueOf/parseXxx 而非構造函數。NumberFormatException。java.time 套件(LocalDateTime 等)替代 Date。