項目中將字符串轉為 Integer 時拋出 java.lang.NumberFormatException: For input string: "2222222222",經排查屬於數值溢出。
String a = "2222222222"; // 10 位數字 Integer b = Integer.valueOf(a); // 拋出 NumberFormatException
Java int 類型為 32 位有符號整數,取值範圍:-2,147,483,648 ~ 2,147,483,647(即 -2³¹ ~ 2³¹-1)。
輸入值 2,222,222,222 超過最大值 2,147,483,647,導致解析失敗。
String a = "2222222222"; BigInteger b = new BigInteger(a); // 支持任意精度整數
BigInteger 內部以數組存儲數值,無理論上限,完全解決大整數解析問題。
| 類型 | 位數 | 範圍 | 適用場景 |
|---|---|---|---|
| byte | 8 | -128 ~ 127 | 極小數值、位運算 |
| short | 16 | -32,768 ~ 32,767 | 較小整數 |
| int | 32 | -2.14億 ~ 2.14億 | 通用整數(默認) |
| long | 64 | -9.22京 ~ 9.22京 | 大整數、時間戳 |
| BigInteger | 任意 | 理論無限 | 超大整數、加密算法 |
Long 或 BigInteger,除非業務明確保證範圍在 int 內。NumberFormatException 並給出友好提示,避免系統崩潰。Apache Commons Math)或原生 long 配合溢出檢查。記住:類型選擇要匹配業務數據範圍,預防溢出從設計階段開始。