使用 Integer.parseInt(String) - 最常用、最推荐
这是最直接、最常用的方法。Integer 类是 int 的包装类,它提供了一个静态方法 parseInt(),专门用于将字符串解析为基本数据类型 int。

语法
int intValue = Integer.parseInt(String str);
示例代码
public class StringToIntExample {
public static void main(String[] args) {
String strNumber = "123";
int number = Integer.parseInt(strNumber);
System.out.println("转换后的整数是: " + number);
System.out.println("类型是: " + ((Object)number).getClass().getName()); // 输出 java.lang.Integer
// 可以进行数学运算
number = number + 10;
System.out.println("加10后: " + number);
}
}
优点
- 简单直接:一行代码即可完成转换。
- 性能高:这是专门为此设计的原生方法,效率很高。
- 返回基本类型:直接返回
int,在很多情况下更方便,尤其是在进行数学运算时。
缺点(非常重要!)
如果字符串不是一个有效的整数表示,它会抛出 NumberFormatException 异常。
以下情况会抛出异常:
- 字符串包含非数字字符(如
"12a3")。 - 字符串为空()。
- 字符串是
null。 - 数字超出
int的范围(如2147483648,因为int的最大值是2147483647)。
示例(异常情况)
public class StringToIntExceptionExample {
public static void main(String[] args) {
try {
// 情况1: 包含非数字字符
String invalidStr1 = "123abc";
int num1 = Integer.parseInt(invalidStr1); // 抛出 NumberFormatException
} catch (NumberFormatException e) {
System.out.println("捕获到异常: 字符串 '" + invalidStr1 + "' 不是有效的整数。");
}
try {
// 情况2: 空字符串
String invalidStr2 = "";
int num2 = Integer.parseInt(invalidStr2); // 抛出 NumberFormatException
} catch (NumberFormatException e) {
System.out.println("捕获到异常: 字符串 '" + invalidStr2 + "' 不是有效的整数。");
}
try {
// 情况3: null
String invalidStr3 = null;
int num3 = Integer.parseInt(invalidStr3); // 抛出 NullPointerException
} catch (NullPointerException e) {
System.out.println("捕获到异常: 字符串是 null。");
}
try {
// 情况4: 超出范围
String invalidStr4 = "2147483648"; // int最大值是 2147483647
int num4 = Integer.parseInt(invalidStr4); // 抛出 NumberFormatException
} catch (NumberFormatException e) {
System.out.println("捕获到异常: 数字 '" + invalidStr4 + "' 超出了 int 范围。");
}
}
}
使用 Integer.valueOf(String) - 返回包装类 Integer
Integer.valueOf() 方法也可以将字符串转换为整数,但它与 parseInt() 有一个关键区别:它返回的是 Integer 对象(包装类型),而不是基本类型 int。
语法
Integer integerObject = Integer.valueOf(String str);
示例代码
public class StringToIntegerObjectExample {
public static void main(String[] args) {
String strNumber = "456";
Integer integerObject = Integer.valueOf(strNumber);
System.out.println("转换后的Integer对象是: " + integerObject);
System.out.println("类型是: " + integerObject.getClass().getName()); // 输出 java.lang.Integer
// 可以自动拆箱(Unboxing)进行数学运算
int number = integerObject + 5;
System.out.println("加5后: " + number);
}
}
优点
- 返回对象:在需要
Integer对象的场景下(例如在泛型集合List<Integer>中)非常有用。 - 可以享受自动拆箱的便利:当代码需要
int时,Java 会自动将Integer对象拆箱为int。
缺点
- 返回包装类型:如果你明确需要一个
int,使用它需要多一个自动拆箱的步骤。 - 同样会抛出异常:和
parseInt()一样,如果字符串格式不正确,同样会抛出NumberFormatException。
使用 Integer(String) 构造函数 - 不推荐
Integer 类有一个构造函数,它接受一个 String 参数,在早期版本的 Java 中,这是转换字符串为 Integer 对象的方式。从 Java 9 开始,这个构造函数已经被标记为 @Deprecated(已弃用),不推荐使用。

语法(不推荐)
Integer integerObject = new Integer(String str);
为什么不推荐?
- 性能较差:创建一个新对象比调用静态方法
valueOf()或parseInt()要慢。 - 可读性差:使用静态方法是更现代、更清晰的风格。
- 已弃用:官方文档明确表示不鼓励使用,未来可能会被移除。
替代方案
- 如果你需要一个
Integer对象,请使用Integer.valueOf()。 - 如果你需要一个
int基本类型,请使用Integer.parseInt()。
总结与最佳实践
| 方法 | 返回类型 | 异常处理 | 推荐场景 | 备注 |
|---|---|---|---|---|
Integer.parseInt() |
int (基本类型) |
抛出 NumberFormatException |
最推荐,当你需要一个 int 值来进行计算或赋值给 int 变量时。 |
性能高,直接。 |
Integer.valueOf() |
Integer (包装类) |
抛出 NumberFormatException |
当你需要一个 Integer 对象时(用于泛型集合)。 |
会返回缓存的对象(在 -128 到 127 范围内),可能有助于节省内存。 |
new Integer() |
Integer (包装类) |
抛出 NumberFormatException |
不推荐。 | 已弃用,性能较差。 |
如何选择?
- 默认选择
Integer.parseInt():在 95% 的情况下,你都需要一个int值来处理数字,这是最直接、最高效的选择。 - 使用
try-catch处理异常:由于parseInt()和valueOf()都会抛出异常,你必须确保代码的健壮性,如果输入数据可能无效(来自用户输入或文件),必须使用try-catch块。
public static int convertStringToInt(String str) {
try {
// 使用 parseInt(),因为我们只需要一个 int 值
return Integer.parseInt(str);
} catch (NumberFormatException e) {
// 处理无效输入,可以返回一个默认值(如0)或抛出自定义异常
System.err.println("错误: 无法将字符串 '" + str + "' 转换为整数。");
return 0; // 或者 throw new MyCustomException("Invalid number format");
}
}
- 检查
null和空字符串:在调用parseInt()之前,最好先检查字符串是否为null或空,这样可以避免异常,让代码逻辑更清晰。
public static int safeConvert(String str) {
if (str == null || str.trim().isEmpty()) {
System.out.println("输入为空,返回默认值 0");
return 0;
}
try {
return Integer.parseInt(str);
} catch (NumberFormatException e) {
System.out.println("格式错误,返回默认值 0");
return 0;
}
}
