下面我将从最简单的方法开始,逐步介绍更健壮和灵活的方法,并解释它们之间的区别和最佳实践。

核心方法:Integer.parseInt()
这是最直接、最常用的方法,它会尝试将一个 String 解析为一个有符号的十进制整数。
基本用法
public class Main {
public static void main(String[] args) {
String strNumber = "123";
int number = Integer.parseInt(strNumber);
System.out.println(number); // 输出: 123
System.out.println(number + 100); // 输出: 223 (可以正常进行数学运算)
}
}
重要:处理异常(NumberFormatException)
parseInt() 方法有一个非常重要的特性:String 不能被解析为有效的整数,它会抛出 NumberFormatException 异常。
在实际开发中,你必须使用 try-catch 语句来处理这种可能性,否则程序可能会意外终止。
public class Main {
public static void main(String[] args) {
String validStr = "456";
String invalidStr1 = "abc"; // 不是数字
String invalidStr2 = "12.3"; // 是浮点数
String invalidStr3 = ""; // 空字符串
String invalidStr4 = "2147483648"; // 超过 int 的最大值
// --- 正常情况 ---
try {
int num1 = Integer.parseInt(validStr);
System.out.println("转换成功: " + num1);
} catch (NumberFormatException e) {
System.out.println("转换 '" + validStr + "' 失败: " + e.getMessage());
}
// --- 异常情况 ---
try {
int num2 = Integer.parseInt(invalidStr1);
System.out.println("转换成功: " + num2);
} catch (NumberFormatException e) {
// 这里的代码会被执行
System.out.println("转换 '" + invalidStr1 + "' 失败: " + e.getMessage());
}
try {
int num3 = Integer.parseInt(invalidStr2);
System.out.println("转换成功: " + num3);
} catch (NumberFormatException e) {
System.out.println("转换 '" + invalidStr2 + "' 失败: " + e.getMessage());
}
try {
int num4 = Integer.parseInt(invalidStr3);
System.out.println("转换成功: " + num4);
} catch (NumberFormatException e) {
System.out.println("转换 '" + invalidStr3 + "' 失败: " + e.getMessage());
}
try {
int num5 = Integer.parseInt(invalidStr4);
System.out.println("转换成功: " + num5);
} catch (NumberFormatException e) {
System.out.println("转换 '" + invalidStr4 + "' 失败: " + e.getMessage());
}
}
}
输出结果:

转换成功: 456
转换 'abc' 失败: For input string: "abc"
转换 '12.3' 失败: For input string: "12.3"
转换 '' 失败: For input string: ""
转换 '2147483648' 失败: For input string: "2147483648"
其他方法
除了 parseInt(),Integer 类还提供了其他相关的方法,以适应不同的需求。
Integer.valueOf()
这个方法也用于将 String 转换为 int,但它返回的是一个 Integer 对象(即 int 的包装类型),而不是原始的 int 类型。
Integer.parseInt(str)-> 返回int(原始类型)Integer.valueOf(str)-> 返回Integer(对象)
String strNumber = "789"; // 使用 valueOf() 得到一个 Integer 对象 Integer integerObject = Integer.valueOf(strNumber); // 这个对象可以自动拆箱为 int int number = integerObject; // 自动拆箱 // 或者直接用在需要 int 的地方 System.out.println(integerObject + 10); // 输出: 799 // 也可以直接转换 int anotherNumber = Integer.valueOf(strNumber); // 内部其实也调用了 parseInt()
什么时候用 valueOf?
- 当你需要一个
Integer对象时,例如在集合(如List<Integer>)中存储。 - 当你需要利用
Integer缓存机制时(JVM 会缓存 -128 到 127 之间的Integer对象,valueOf()会优先从缓存中获取)。
对于单纯的数字转换,parseInt() 更常用,因为它直接返回原始类型,开销更小。
处理带空格的字符串
用户输入的字符串可能前后会有多余的空格(" 123 "),直接使用 parseInt() 会抛出异常。
为了处理这种情况,可以在转换前使用 String.trim() 方法来去除首尾的空格。
String strWithSpaces = " 456 ";
try {
// 必须先 trim 再 parseInt
int number = Integer.parseInt(strWithSpaces.trim());
System.out.println("转换成功: " + number); // 输出: 转换成功: 456
} catch (NumberFormatException e) {
System.out.println("转换失败: " + e.getMessage());
}
处理不同进制的字符串
parseInt 还有一个重载版本,可以让你指定数字的进制(基数,radix)。
// 语法: Integer.parseInt(String s, int radix)
// radix: 进制,2 (二进制), 8 (八进制), 16 (十六进制)
// 十六进制字符串
String hexStr = "FF";
int hexValue = Integer.parseInt(hexStr, 16);
System.out.println("FF (十六进制) = " + hexValue); // 输出: FF (十六进制) = 255
// 八进制字符串
String octStr = "10";
int octValue = Integer.parseInt(octStr, 8);
System.out.println("10 (八进制) = " + octValue); // 输出: 10 (八进制) = 8
// 二进制字符串
String binStr = "1010";
int binValue = Integer.parseInt(binStr, 2);
System.out.println("1010 (二进制) = " + binValue); // 输出: 1010 (二进制) = 10
总结与最佳实践
| 方法 | 返回类型 | 描述 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|---|---|
Integer.parseInt() |
int (原始类型) |
将字符串解析为十进制整数。 | 直接返回基本类型,性能好。 | 必须处理 NumberFormatException。 |
绝大多数情况下的首选,当你需要一个 int 值时。 |
Integer.valueOf() |
Integer (对象) |
将字符串解析为 Integer 对象。 |
返回对象,可用于集合,利用缓存。 | 返回对象,开销稍大。 | 当你需要一个 Integer 对象时(如泛型集合)。 |
Integer.parseInt(str.trim()) |
int (原始类型) |
先去除字符串首尾空格,再解析。 | 容错性更好,能处理带空格的输入。 | 需要额外调用 trim()。 |
当输入可能包含不可见的空格时。 |
Integer.parseInt(s, radix) |
int (原始类型) |
按指定进制解析字符串。 | 功能强大,可处理非十进制数字。 | 需要理解进制概念。 | 处理二进制、八进制、十六进制等字符串时。 |
最终推荐方案
在将用户输入或不确定来源的 String 转换为 int 时,最健壮、最安全的方法是:
public static int safeStringToInt(String str) {
if (str == null || str.trim().isEmpty()) {
// 可以返回一个默认值,或者抛出自定义异常
return 0;
}
try {
return Integer.parseInt(str.trim());
} catch (NumberFormatException e) {
// 可以记录日志,或者返回一个默认值
System.err.println("无法将字符串 '" + str + "' 转换为整数。");
return 0; // 返回一个默认值,如 0 或 -1
}
}
// 使用示例
public class Main {
public static void main(String[] args) {
System.out.println(safeStringToInt("123")); // 123
System.out.println(safeStringToInt(" -456 ")); // -456
System.out.println(safeStringToInt("abc")); // 0 (并打印错误信息)
System.out.println(safeStringToInt("")); // 0
System.out.println(safeStringToInt(null)); // 0
}
}
这个封装方法处理了 null、空字符串、前后空格和非法格式,是一个非常实用的工具函数。
