Java 開發中,基本型別、包裝類別與字串之間的轉換是高頻操作。本文系統整理 10 大類轉換場景,提供標準 API 用法與程式碼範例,涵蓋數值型別縮寬轉換、字串解析、字元處理與布林判斷,幫助開發者快速查閱並避免常見陷阱。
// short → int:自動擴寬轉換,無需強制轉型
short shortVar = 100;
int intVar = shortVar; // 隱式轉換,安全無損失
// int → short:窄化轉換,需強制轉型,可能溢位截斷
intVar = 50000;
shortVar = (short) intVar; // 結果:-15536 (高位截斷)
System.out.println(shortVar);
規則:byte → short → int → long → float → double 為自動擴寬方向;反向需強制轉型,注意資料損失。
統一使用 String.valueOf(基本型別) 靜態方法,最通用且無需實例化:
int i = 42;
float f = 3.14f;
double d = 2.71828;
char c = '中';
boolean b = true;
String s1 = String.valueOf(i); // "42"
String s2 = String.valueOf(f); // "3.14"
String s3 = String.valueOf(d); // "2.71828"
String s4 = String.valueOf(c); // "中"
String s5 = String.valueOf(b); // "true"
等價寫法:Integer.toString(i)、Double.toString(d) 等型別專屬方法,效能略優但通用性較低。
String intStr = "100";
String floatStr = "3.14";
String longStr = "9999999999";
String doubleStr = "2.71828";
Integer i = Integer.valueOf(intStr); // 建議:使用 valueOf 享受快取
Float f = Float.valueOf(floatStr);
Long l = Long.valueOf(longStr);
Double d = Double.valueOf(doubleStr);
int primitiveInt = Integer.parseInt(intStr); // 直接得到 int
float primitiveFloat = Float.parseFloat(floatStr);
long primitiveLong = Long.parseLong(longStr);
double primitiveDouble = Double.parseDouble(doubleStr);
| 原文錯誤寫法 | 正確寫法 | 說明 |
|---|---|---|
Float f = Integer.parseInt(floatStr) | Float f = Float.valueOf(floatStr) | Integer 無法解析浮點數字串 |
Long lo = long.parseInt(longStr) | Long lo = Long.valueOf(longStr) | 長整數用 Long.parseLong / Long.valueOf |
Double d = double.parseInt(doublestring) | Double d = Double.valueOf(doubleStr) | Double 型別用 Double.parseDouble / Double.valueOf |
Byte b = Integer.intValue(s) | Byte b = Byte.valueOf(s) | Byte/Short 有專屬 valueOf/parseXxx |
Boolean flag = Boolean.valueOf("s") | Boolean flag = Boolean.valueOf(s) | 傳入變數 s 而非字面值 "s" |
String s = "100";
byte b = Byte.parseByte(s); // 或 Byte.valueOf(s)
short sh = Short.parseShort(s); // 或 Short.valueOf(s)
// char → String
char c = '漢';
String str = String.valueOf(c); // "漢"
// String → char (取單一字元)
String text = "漢字";
char first = text.charAt(0); // '漢'
char second = text.charAt(1); // '字'
// String → boolean (不區分大小寫)
String trueStr = "true";
String falseStr = "false";
String yesStr = "YES";
boolean b1 = Boolean.parseBoolean(trueStr); // true
boolean b2 = Boolean.parseBoolean(falseStr); // false
boolean b3 = Boolean.parseBoolean(yesStr); // false (非 "true" 皆為 false)
Boolean obj = Boolean.valueOf(trueStr); // 包裝類別 Boolean.TRUE
注意:Boolean.parseBoolean() 僅 "true" (忽略大小寫) 回傳 true,其餘皆為 false,不支援 "yes"/"1"/"on" 等語意。
| 轉換方向 | 推薦 API | 備註 |
|---|---|---|
| 基本型別 → String | String.valueOf(xxx) | 通用、無 NPE 風險 |
| String → 包裝類別 | Xxx.valueOf(str) | 享受快取、可回傳 null |
| String → 基本型別 | Xxx.parseXxx(str) | 直接得到 primitive、效能略優 |
| 包裝類別 → 基本型別 | 自動拆箱 | Java 5+ 自動處理,注意 NPE |
| 基本型別 → 包裝類別 | 自動裝箱 | Java 5+ 自動處理,享受快取 |
valueOf 快取,重複使用不創建新物件掌握 Java 型別轉換的標準 API 與慣用模式,能寫出更簡潔、安全、高效的程式碼。建議收藏本手冊作為開發時的快速參考,並在 Code Review 時留意原文中常見的 Integer.parseInt 誤用浮點數字串、long.parseInt 等不存在方法等低級錯誤。