首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java String 與 int 相互轉換完全指南:核心 API、性能對比與避坑實戰

     編輯:Java 綜合教學

Java String 與 int 相互轉換完全指南:核心 API、性能對比與避坑實戰

String ↔ int 轉換是 Java 開發中最高頻的基礎操作之一,看似簡單,實則暗藏 NumberFormatException、自動拆箱裝箱開銷、緩存機制差異等細節。本文系統梳理 4 種核心轉換方式、性能基準、異常處理模式與最佳實踐。

一、 int → String 四大核心方法

方法簽名特點適用場景
String.valueOf()static String valueOf(int i)官方推薦,null 安全,底層調用 Integer.toString()通用首選
Integer.toString()static String toString(int i)直接調用,無額外開銷,性能最優高頻熱點路徑
String.format()static String format(String fmt, Object... args)支持格式化(補零、進制、千分位),內部創建 Formatter,較慢需格式化輸出
"" + int字符串拼接編譯器優化為 StringBuilder.append(),可讀性一般簡單拼接場景

代碼示例

int num = 42;
String s1 = String.valueOf(num);      // "42" ✓ 推薦
String s2 = Integer.toString(num);    // "42" ✓ 最快
String s3 = String.format("%05d", num); // "00042" ✓ 格式化
String s4 = num + "";                 // "42" △ 簡單場合可用
String s5 = String.format("%,d", 1234567); // "1,234,567" 千分位

二、 String → int 兩大核心方法

方法簽名返回類型異常適用場景
Integer.parseInt()static int parseInt(String s)基本類型 intNumberFormatException首選,無自動裝箱
Integer.valueOf()static Integer valueOf(String s)包裝類型 IntegerNumberFormatException需 Integer 對象(如放入集合)

進制轉換(雙參數重載)

Integer.parseInt("1010", 2);    // 10 (二進制)
Integer.parseInt("FF", 16);     // 255 (十六進制)
Integer.parseInt("77", 8);      // 63 (八進制)
Integer.valueOf("2A", 16);      // 42 (返回 Integer)

三、 性能基準測試(JMH 參考數據)

@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public class IntStringConversionBenchmark {
    @Benchmark public void intToString_valueOf() { String.valueOf(12345); }
    @Benchmark public void intToString_toString() { Integer.toString(12345); }
    @Benchmark public void intToString_format() { String.format("%d", 12345); }
    @Benchmark public void intToString_concat() { 12345 + ""; }

    @Benchmark public void stringToInt_parseInt() { Integer.parseInt("12345"); }
    @Benchmark public void stringToInt_valueOf() { Integer.valueOf("12345"); }
}

/*
典型結果 (ns/op, 越小越快):
intToString_toString      12.3 ± 0.2   ← 最快
intToString_valueOf       12.5 ± 0.3   ← 幾乎相同
intToString_concat        18.7 ± 0.5   ← StringBuilder 開銷
intToString_format       850.0 ± 20.0  ← Formatter 極慢 (≈70x)

stringToInt_parseInt      45.2 ± 1.0   ← 首選
stringToInt_valueOf       48.5 ± 1.2   ← 額外裝箱開銷
*/

四、 異常處理最佳實踐

1. 防御性編程:預檢正則

private static final Pattern INT_PATTERN = Pattern.compile("^-?\\d+$");

public static int safeParseInt(String s, int defaultValue) {
    if (s == null || !INT_PATTERN.matcher(s).matches()) {
        return defaultValue;
    }
    try {
        return Integer.parseInt(s);
    } catch (NumberFormatException e) { // 雙重保險
        return defaultValue;
    }
}

2. Java 8+ Optional 風格


五、 自動裝箱/拆箱陷阱

、"123\u200B" → NFE,**先 trim()**
  • 超出 int 範圍:"2147483648" → NFE,大數用 Long.parseLong 或 BigInteger
  • 高頻熱點用 String.format → 性能殺手,改用 Integer.toString + 手動格式化
  • 集合存儲用 Integer.valueOf → 利用緩存池減少對象創建
  • 拼接字符串用 + 循環 → 隱式創建 StringBuilder,改用 StringBuilder 顯式構建
  • 七、 進制轉換速查表

    目標代碼結果
    int → 二進制字符串Integer.toBinaryString(42)"101010"
    int → 八進制字符串Integer.toOctalString(42)"52"
    int → 十六進制字符串Integer.toHexString(42)"2a"
    字符串 → int (指定進制)Integer.parseInt("2a", 16)42
    int → 任意進制 (2-36)Integer.toString(42, 16)"2a"

    掌握 String.valueOf/Integer.toString 雙雄與 Integer.parseInt 正統,配合正則預檢、Optional 異常處理、基本類型優先原則,讓 String↔int 轉換在正確性、性能、可讀性三維達到最優。

    1. 上一篇文章:
    2. 下一篇文章:
    Copyright © 程式碼之家 All Rights Reserved