String 作為不可變最終類,是 Java 應用中最高頻的數據載體。本文匯總String ↔ 基本類型(long/int/double/float/boolean/char)、String ↔ char[]、String ↔ Object的標準轉換 API、異常場景、性能差異與工程避坑指南,附可直接運行的演示代碼。
| 目標類型 | 標準 API | 異常 | 備註 |
|---|---|---|---|
| long | Long.parseLong(str) | NumberFormatException | 不自動去空格,建議先 trim() |
| int | Integer.parseInt(str) | NumberFormatException | 同長整型 |
| double | Double.parseDouble(str) | NumberFormatException | 科學計數法支援 |
| float | Float.parseFloat(str) | NumberFormatException | 精度較低 |
| boolean | Boolean.parseBoolean(str) | 無(非 true 均 false) | 只識別 "true"(忽略大小寫),其餘均 false |
| char | str.toCharArray() / str.charAt(0) | IndexOutOfBoundsException | 單字符用 charAt,整串用 toCharArray |
String.valueOf(基本類型值) — 底層調用對應 Wrapper.toString(),null 安全返回 "null"。String.format("%,.2f", 1234.5) → "1,234.50",DecimalFormat 更複雜場景。String.valueOf('a')、String.valueOf(new char[]{'a','b'})、String.valueOf(chars, offset, count) 切片。// 1. 拼接字符串轉數字(極慢,產生大量臨時對象)
int i = Integer.parseInt("" + 123); // 避免
// 2. 直接 valueOf(推薦)
String s = String.valueOf(123); // 單次分配
// 3. 基本類型 toString(同 valueOf,語義更清晰)
String s2 = Integer.toString(123);
String.valueOf(obj):obj == null 返回 "null",否則調用 obj.toString()。Object o = "abc"; 無轉換發生,僅引用指向。str = str.trim() 防空格導致 NFE。NumberFormatException 返回默認值或拋業務異常,勿吞噬。Integer.toString/Long.toString 避免 valueOf 裝箱開銷(JIT 通常會內聯優化)。"true".equalsIgnoreCase(str) 而非 Boolean.parseBoolean(後者容錯過強)。new String(char[]) 而非 String.valueOf,語義明確且避免 null 檢查分支。掌握轉換全景,能消除生產環境中因類型轉換引發的 NPE、NFE、精度丟失、編碼亂碼等頑疾。