使用 Integer.parseInt() (最常用、最标准)
这是最直接、最常用的方法,它属于 Java 的包装类 java.lang.Integer 中的静态方法。

语法
int intValue = Integer.parseInt(String str);
示例代码
public class StringToIntExample {
public static void main(String[] args) {
String strNumber = "12345";
// 将 String 转换为 int
int number = Integer.parseInt(strNumber);
System.out.println("转换后的整数: " + number);
System.out.println("类型: " + ((Object)number).getClass().getName()); // 检查类型
// 也可以直接用于计算
int result = number + 100;
System.out.println("计算结果: " + result); // 输出 12445
}
}
使用 Integer.valueOf() (同样常用)
这个方法也来自 java.lang.Integer 类,它返回的是一个 Integer 对象(即 int 的包装类型),而不是原始的 int 类型,但在很多情况下(比如赋值给 int 变量时),Java 会自动进行“拆箱”(unboxing),所以用起来和 parseInt 非常相似。
语法
Integer integerObject = Integer.valueOf(String str); // 如果需要原始 int 类型 int intValue = integerObject; // 自动拆箱 // 或者 int intValue = Integer.valueOf(String str); // 直接赋值,编译器会自动拆箱
示例代码
public class StringToIntValueOfExample {
public static void main(String[] args) {
String strNumber = "9876";
// Integer.valueOf() 返回一个 Integer 对象
Integer integerObject = Integer.valueOf(strNumber);
System.out.println("Integer 对象: " + integerObject);
System.out.println("对象类型: " + integerObject.getClass().getName());
// 自动拆箱为 int
int number = integerObject;
System.out.println("拆箱后的整数: " + number);
System.out.println("类型: " + ((Object)number).getClass().getName());
// 也可以直接一步到位
int anotherNumber = Integer.valueOf("5432");
System.out.println("直接转换的整数: " + anotherNumber);
}
}
⚠️ 重要:处理异常 (非常关键)
String 中包含非数字字符("12a3"),或者是一个空字符串 ,或者超出了 int 类型的表示范围(Integer.MIN_VALUE 到 Integer.MAX_VALUE),上述两个方法都会抛出 NumberFormatException 异常,在实际开发中,你必须使用 try-catch 语句来处理这种潜在的错误。
示例:处理异常
public class StringToIntWithExceptionHandling {
public static void main(String[] args) {
String[] testStrings = {"123", "-456", "12a3", "", "2147483648"}; // 最后一个数超过了int的最大值
for (String str : testStrings) {
try {
int number = Integer.parseInt(str);
System.out.println("成功转换 '" + str + "' -> " + number);
} catch (NumberFormatException e) {
System.out.println("转换失败: '" + str + "' 不是有效的整数。");
// e.printStackTrace(); // 打印详细的错误堆栈信息(调试时用)
}
}
}
}
输出结果:
成功转换 '123' -> 123
成功转换 '-456' -> -456
转换失败: '12a3' 不是有效的整数。
转换失败: '' 不是有效的整数。
转换失败: '2147483648' 不是有效的整数。
使用 new Integer(String str) (已过时)
这是一种通过构造函数来创建 Integer 对象的方式。

⚠️ 重要:这种方法在 Java 9 中被标记为过时(deprecated),并且在 Java 9 之后被移除了。 强烈不推荐在新代码中使用它。
为什么被移除?
new Integer(str) 内部实际上也是调用了 Integer.parseInt(str),创建一个不必要的对象会增加内存开销和垃圾回收的压力,而 Integer.valueOf() 在 Java 5 引入了“自动装箱/拆箱”和“缓存机制”(-128到127之间的数值会被缓存),性能更好。
不推荐的示例 (仅作了解)
// 不要在 Java 9+ 的代码中使用这种方式
// Integer num = new Integer("123"); // 编译器会警告
总结与对比
| 方法 | 返回类型 | 是否抛出异常 | 推荐度 | 备注 |
|---|---|---|---|---|
Integer.parseInt() |
int (原始类型) |
是 | ⭐⭐⭐⭐⭐ | 最常用,当你明确需要一个原始的 int 类型时,首选此方法。 |
Integer.valueOf() |
Integer (对象类型) |
是 | ⭐⭐⭐⭐⭐ | 非常常用,当你需要一个 Integer 对象时使用,或需要利用其缓存机制时。 |
new Integer() |
Integer (对象类型) |
是 | ⭐☆☆☆☆ | 已过时,性能较差,应避免使用。 |
最佳实践
- 首选
Integer.parseInt():如果你的目标就是得到一个int基本类型变量,这是最清晰、最直接的选择。 - 必须处理异常:永远不要假设输入的
String是一个有效的数字,总是将parseInt或valueOf放在try-catch块中,以防止程序因NumberFormatException而崩溃。 - 理解
parseInt和valueOf的区别:parseInt直接返回原始类型,valueOf返回对象,在需要对象集合(如List<Integer>)时,valueOf更合适,在简单赋值时,两者效果几乎一样。

