核心方法
最核心和推荐的方法是使用 Integer 类的静态方法。

(图片来源网络,侵删)
Integer.parseInt(String s)
这是最常用、最直接的方法,它将 String 参数解析为 int 原始类型。
-
特点:
- 返回
int原始数据类型。 String不是有效的整数表示,会抛出NumberFormatException。- 性能最好,因为它不涉及对象的创建。
- 返回
-
示例代码:
public class StringToIntExample { public static void main(String[] args) { String strNumber = "123"; // 使用 parseInt() 将 String 转换为 int int number = Integer.parseInt(strNumber); System.out.println("转换后的 int 值: " + number); System.out.println("类型: " + ((Object)number).getClass().getName()); // 输出 int // 另一个例子 String negativeStr = "-456"; int negativeNum = Integer.parseInt(negativeStr); System.out.println("转换后的负数: " + negativeNum); // 处理带空格的字符串(需要先trim) String spacedStr = " 789 "; int spacedNum = Integer.parseInt(spacedStr.trim()); System.out.println("处理空格后的转换: " + spacedNum); } }
Integer.valueOf(String s)
这个方法将 String 参数解析为一个 Integer 对象(int 的包装类)。

(图片来源网络,侵删)
-
特点:
- 返回
Integer对象。 String不是有效的整数表示,同样会抛出NumberFormatException。- 它内部会先调用
parseInt(),然后返回一个Integer实例,在 Java 5 之后,它会利用Integer缓存池(-128 到 127 之间的数字),如果数字在此范围内,会返回缓存的实例,有助于节省内存。
- 返回
-
示例代码:
public class StringToIntegerObjectExample { public static void main(String[] args) { String strNumber = "123"; // 使用 valueOf() 将 String 转换为 Integer 对象 Integer numberObject = Integer.valueOf(strNumber); System.out.println("转换后的 Integer 对象: " + numberObject); System.out.println("类型: " + numberObject.getClass().getName()); // 输出 java.lang.Integer // 另一个例子 String strForCache = "100"; Integer obj1 = Integer.valueOf(strForCache); Integer obj2 = Integer.valueOf(strForCache); // 对于 -128 到 127 之间的数字,valueOf 会返回同一个缓存对象 System.out.println("obj1 和 obj2 是同一个对象吗? " + (obj1 == obj2)); // 输出 true String strForNew = "200"; Integer obj3 = Integer.valueOf(strForNew); Integer obj4 = Integer.valueOf(strForNew); // 超出缓存范围的数字,会创建新的对象 System.out.println("obj3 和 obj4 是同一个对象吗? " + (obj3 == obj4)); // 输出 false } }
处理异常(非常重要)
在实际开发中,你不能假设输入的 String 总是有效的数字,处理 NumberFormatException 至关重要。
最佳实践:使用 try-catch 块
这是处理可能无效输入的标准方法。

(图片来源网络,侵删)
public class SafeConversionExample {
public static void main(String[] args) {
String input1 = "2025";
String input2 = "abc";
String input3 = null; // 空指针的情况
String input4 = "12345678901234567890"; // 超出 int 范围
convertAndPrint(input1);
convertAndPrint(input2);
convertAndPrint(input3);
convertAndPrint(input4);
}
public static void convertAndPrint(String str) {
if (str == null) {
System.out.println("输入为 null,无法转换。");
return;
}
try {
// 使用 parseInt() 进行转换
int number = Integer.parseInt(str);
System.out.println("成功转换: '" + str + "' -> " + number);
} catch (NumberFormatException e) {
// 捕获数字格式异常
System.out.println("转换失败: '" + str + "' 不是有效的整数。");
}
}
}
输出:
成功转换: '2025' -> 2025
转换失败: 'abc' 不是有效的整数。
输入为 null,无法转换。
转换失败: '12345678901234567890' 不是有效的整数。
方法对比与如何选择
| 特性 | Integer.parseInt(String) |
Integer.valueOf(String) |
|---|---|---|
| 返回类型 | int (原始类型) |
Integer (对象) |
| 抛出异常 | NumberFormatException |
NumberFormatException |
| 性能 | 稍高,直接返回基本类型,无对象开销。 | 稍低,需要创建/获取 Integer 对象。 |
| 适用场景 | - 需要进行数学计算,不关心对象特性。 - 在性能敏感的代码中。 - 当你需要 int 类型(数组索引、循环计数器)。 |
- 需要将结果存入 List<Integer>、Map 等集合中。- 当你需要利用 Integer 的方法(如 toString(), compareTo())。- 当你需要利用 Integer 的缓存特性。 |
简单选择指南:
- 如果你需要一个
int:使用Integer.parseInt()。 - 如果你需要一个
Integer对象:使用Integer.valueOf()。 - 如果输入可能无效:始终使用
try-catch块来处理NumberFormatException。
其他不推荐的方法(了解即可)
通过 Integer 构造函数
在 Java 9 之前,你可以通过 new Integer(String) 来创建一个 Integer 对象。
// Java 9 之前可行,但已废弃 String str = "123"; Integer number = new Integer(str); // 已被标记为 @Deprecated
为什么不推荐?
- 已废弃:自 Java 9 起,该构造函数已被废弃,官方文档明确指出,应该使用静态的
valueOf()方法。 - 性能差:它总是创建一个新的
Integer实例,无法利用Integer的缓存池,效率低于valueOf()。
使用 Number 类
String 没有直接的方法可以转换为 Number,但你可以先转换为 Double 或 BigDecimal,然后再转换为 Integer,这种方法非常繁琐且不必要,只适用于一些非常特殊的情况(字符串是科学计数法表示的数字,如 "1.23E2")。
String str = "123.45"; // 这种方法不适用于普通整数转换,且会丢失精度 Number number = Double.parseDouble(str); int intValue = number.intValue(); // 结果是 123
为什么不推荐?
- 过度复杂:对于简单的整数转换,这是“杀鸡用牛刀”。
- 精度丢失:如果字符串包含小数,直接
intValue()会截断小数部分,而不是抛出异常,容易隐藏错误。
| 方法 | 推荐度 | 描述 |
|---|---|---|
Integer.parseInt() |
⭐⭐⭐⭐⭐ | 首选,当需要 int 原始类型时,性能最好。 |
Integer.valueOf() |
⭐⭐⭐⭐⭐ | 首选,当需要 Integer 对象时,是现代 Java 的标准做法。 |
try-catch |
⭐⭐⭐⭐⭐ | 必须,与上述方法结合使用,确保代码健壮性。 |
new Integer() |
⭐ | 不推荐,已废弃,性能不佳。 |
Double.parseDouble() |
⭐ | 不推荐,仅用于处理特殊格式的数字,不适合普通转换。 |
parseInt 和 valueOf 是你工具箱里的主力,而 try-catch 是你的安全带。
