1. 基本型別與包裝類對照
| 基本型別 | 位元數 | 包裝類 |
| boolean | 1 | Boolean |
| byte | 8 | Byte |
| char | 16 | Character |
| short | 16 | Short |
| int | 32 | Integer |
| long | 64 | Long |
| float | 32 | Float |
| double | 64 | Double |
| void | — | Void |
基本型別儲存值,包裝類為物件,用於集合、泛型、null 語意等場合。
2. 常值表示法
- 十六進位:
0xFF, 0X9A
- 八進位:
0123, 034
- 長整數:
9L, 342L
- 浮點數:
1.3f (float), 1.3 (double)
- 字元:
'a', '\n', '\\'', '\\\"', '\\\\'
3. 基本型別相互轉換
自動轉型 (Widening)
byte/short/char → int → long → float → double
- 運算式中自動提升:
byte b=3; b=(byte)(b*3); 需強制轉回。
- 方法多載匹配:實參較「小」,形參較「大」且最近者優先。
強制轉型 (Narrowing)
int n = (int) 3.14159; // 截斷小數
long l = 123L;
int i = (int) l; // 可能溢位
4. 包裝類轉換 API
| 方向 | 方法 | 範例 |
| 基本 → 包裝 | 建構子 / valueOf() | Integer i = Integer.valueOf(123); |
| 包裝 → 基本 | xxxValue() | int n = i.intValue(); |
| 包裝 → 其他基本 | yyyValue() | double d = i.doubleValue(); |
5. 字串與其他型別轉換
其他 → 字串
String.valueOf(x) (靜態,通用)
x.toString() (需非 null)
x + "" (簡潔但產生中間物件)
字串 → 其他
parseXxx() 靜態方法:Integer.parseInt("123"), Double.parseDouble("3.14")
valueOf() 回傳包裝類:Integer.valueOf("123")
new Wrapper("123").xxxValue()
6. 日期時間轉換
舊 API (java.util.Date / java.sql.*)
new Date(year, month, date) @Deprecated
new Date(millisSinceEpoch):長整數毫秒數
date.getTime() → long
SimpleDateFormat 格式化/解析(非執行緒安全)
現代 API (Java 8+ java.time)
| 類別 | 用途 | 關鍵方法 |
| LocalDate | 無時區日期 | parse(), format(), atStartOfDay() |
| LocalTime | 無時區時間 | parse(), format() |
| LocalDateTime | 無時區日期時間 | parse(), format(), toInstant(zone) |
| Instant | 時間戳 (UTC) | now(), toEpochMilli(), atZone(zoneId) |
| ZonedDateTime | 帶時區日期時間 | parse(), format(), withZoneSameInstant() |
| DateTimeFormatter | 格式化/解析 | ofPattern("yyyy-MM-dd HH:mm:ss") |
互轉範例
// LocalDateTime ↔ Instant (需時區)
LocalDateTime ldt = LocalDateTime.now();
Instant instant = ldt.atZone(ZoneId.systemDefault()).toInstant();
LocalDateTime back = instant.atZone(ZoneId.systemDefault()).toLocalDateTime();
// 舊 Date ↔ Instant
Date old = new Date();
Instant ins = old.toInstant();
Date newDate = Date.from(ins);
// 格式化
String formatted = ldt.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm"));
7. 最佳實踐清單
- 優先使用基本型別,效能最佳;集合/泛型/需 null 時用包裝類。
- 字串解析數字用
parseXxx(),拋出 NumberFormatException 需捕捉。
- 日期時間**一律改用 java.time**,避開
Date/Calendar 可變、非執行緒安全、時區混淆等坑。
- 格式化輸出用
DateTimeFormatter (不可變、執行緒安全)。
- 資料庫層:
TIMESTAMP WITH TIME ZONE 對應 OffsetDateTime,DATE 對應 LocalDate。