Integer.parseInt()
这是最直接、最常用的方法,它属于 java.lang.Integer 类。

基本用法
String strNumber = "12345"; int number = Integer.parseInt(strNumber); System.out.println(number); // 输出: 12345 System.out.println(number + 100); // 输出: 12445
处理异常(非常重要!)
String 不是有效的数字格式(包含非数字字符、为空或为 null),Integer.parseInt() 会抛出 NumberFormatException,在实际开发中,必须使用 try-catch 块来处理这种异常。
String strNumber = "123abc"; // 无效的数字字符串
try {
int number = Integer.parseInt(strNumber);
System.out.println("转换成功: " + number);
} catch (NumberFormatException e) {
// 当字符串无法转换为整数时,这里的代码会执行
System.out.println("错误: 无法将字符串 '" + strNumber + "' 转换为整数。");
// e.printStackTrace(); // 打印详细的错误堆栈信息(调试时很有用)
}
最佳实践:只要不确定输入的 String 是否总是有效的,就应该始终使用 try-catch。
其他方法
除了 Integer.parseInt(),还有其他几种方式可以实现转换,各有其适用场景。
使用 Integer.valueOf()
Integer.valueOf() 也可以将 String 转换为 int,它和 parseInt() 的主要区别在于返回类型:

Integer.parseInt(String s): 返回一个 基本数据类型int。Integer.valueOf(String s): 返回一个Integer对象(包装类型)。
在 Java 5 之后,由于自动装箱(Autoboxing)机制,你可以直接将 Integer 对象赋值给 int 变量,所以它们在用法上看起来很像。
String strNumber = "987"; // 使用 valueOf(),返回 Integer 对象 Integer integerObject = Integer.valueOf(strNumber); // 自动装箱,将 Integer 对象赋值给 int 变量 int number = integerObject; // 或者 int number = Integer.valueOf(strNumber); System.out.println(number); // 输出: 987 System.out.println(integerObject instanceof Integer); // 输出: true
如何选择?
- 如果你需要一个原始的
int类型,使用Integer.parseInt()更直接,因为它避免了创建一个额外的Integer对象。 - 如果你需要一个
Integer对象(在泛型集合List<Integer>中),或者需要利用Integer类提供的其他方法,使用Integer.valueOf()。
异常处理:Integer.valueOf() 同样会在转换失败时抛出 NumberFormatException,所以也需要 try-catch。
使用 NumberUtils (Apache Commons Lang)
如果你在项目中使用了 Apache Commons Lang 库,可以使用 NumberUtils 来提供更安全的转换,它有一个方法可以直接返回 int,并在转换失败时返回一个默认值,从而避免异常。

Maven 依赖:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version> <!-- 请使用最新版本 -->
</dependency>
代码示例:
import org.apache.commons.lang3.math.NumberUtils; String str1 = "555"; String str2 = "abc"; String str3 = ""; // 空字符串 String str4 = null; // null 值 // 转换成功,返回解析的值 int num1 = NumberUtils.toInt(str1); System.out.println(num1); // 输出: 555 // 转换失败,返回默认值 0 int num2 = NumberUtils.toInt(str2); System.out.println(num2); // 输出: 0 // 也可以指定自定义的默认值 int num3 = NumberUtils.toInt(str3, -1); // 如果转换失败,返回 -1 int num4 = NumberUtils.toInt(str4, -999); // 如果转换失败,返回 -999 System.out.println(num3); // 输出: -1 System.out.println(num4); // 输出: -999
这种方法非常简洁,特别适用于那些希望优雅地处理错误而不是抛出异常的场景。
处理不同进制的数字
Integer 类还提供了重载的 parseInt 方法,可以解析指定进制的字符串。
// 解析二进制字符串 "1010" (十进制的 10)
String binaryStr = "1010";
int fromBinary = Integer.parseInt(binaryStr, 2);
System.out.println("二进制 " + binaryStr + " 转换为十进制是: " + fromBinary); // 输出: 10
// 解析十六进制字符串 "FF" (十进制的 255)
String hexStr = "FF";
int fromHex = Integer.parseInt(hexStr, 16);
System.out.println("十六进制 " + hexStr + " 转换为十进制是: " + fromHex); // 输出: 255
// 解析八进制字符串 "10" (十进制的 8)
String octalStr = "10";
int fromOctal = Integer.parseInt(octalStr, 8);
System.out.println("八进制 " + octalStr + " 转换为十进制是: " + fromOctal); // 输出: 8
注意:传入的 radix(进制)必须在 Character.MIN_RADIX (2) 和 Character.MAX_RADIX (36) 之间,如果字符串中的字符不在该进制的有效字符范围内(在二进制字符串中出现 '2'),同样会抛出 NumberFormatException。
总结与对比
| 方法 | 返回类型 | 是否抛出异常 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|---|
Integer.parseInt() |
int (基本类型) |
是 (NumberFormatException) |
最直接,性能最好(无对象创建) | 必须手动处理异常 | 需要原始 int 值,且能处理异常的情况 |
Integer.valueOf() |
Integer (对象) |
是 (NumberFormatException) |
返回对象,可用于泛型 | 有轻微的性能开销(创建对象) | 需要包装类型对象,或用于泛型集合 |
NumberUtils.toInt() |
int (基本类型) |
否 (返回默认值) | 代码简洁,无需 try-catch |
需要引入第三方库 | 希望优雅处理错误,提供默认值,不希望抛出异常 |
Integer.parseInt(s, radix) |
int (基本类型) |
是 (NumberFormatException) |
能解析不同进制的字符串 | 同样需要处理异常 | 需要解析二进制、八进制、十六进制等字符串 |
最终建议
- 对于标准十进制转换:使用
Integer.parseInt(),并务必用try-catch包裹。 - 如果需要
Integer对象:使用Integer.valueOf(),并用try-catch包裹。 - 如果不想处理异常,且项目允许引入第三方库:使用
NumberUtils.toInt(),代码更简洁。 - 如果需要解析不同进制:使用
Integer.parseInt(s, radix),并用try-catch包裹。
