最常用和推荐的方法:Integer.parseInt()
这是将字符串转换为基本数据类型 int 的标准方法。

语法
public static int parseInt(String s) throws NumberFormatException
特点
- 返回值:基本数据类型
int。 - 异常处理:如果字符串不是一个有效的整数表示(包含非数字字符、为空、超出
int范围等),它会抛出NumberFormatException异常,在使用时通常需要配合try-catch语句。
示例代码
public class StringToIntExample {
public static void main(String[] args) {
String str1 = "123";
String str2 = "-456";
String str3 = "7890"; // 一个有效的数字
String str4 = "12a45"; // 包含非数字字符
String str5 = ""; // 空字符串
String str6 = "2147483648"; // 超过int最大值
// --- 成功转换的情况 ---
try {
int num1 = Integer.parseInt(str1);
System.out.println("字符串 '" + str1 + "' 转换为 int: " + num1);
System.out.println("类型: " + ((Object)num1).getClass().getSimpleName()); // 输出 int
int num2 = Integer.parseInt(str2);
System.out.println("字符串 '" + str2 + "' 转换为 int: " + num2);
int num3 = Integer.parseInt(str3);
System.out.println("字符串 '" + str3 + "' 转换为 int: " + num3);
} catch (NumberFormatException e) {
System.out.println("转换 '" + str1 + "' 或 '" + str2 + "' 或 '" + str3 + "' 时发生错误: " + e.getMessage());
}
System.out.println("------------------------------------");
// --- 转换失败的情况 ---
try {
// 这会抛出 NumberFormatException
int num4 = Integer.parseInt(str4);
System.out.println("字符串 '" + str4 + "' 转换为 int: " + num4);
} catch (NumberFormatException e) {
System.out.println("转换 '" + str4 + "' 失败: " + e.getMessage());
}
try {
// 这会抛出 NumberFormatException
int num5 = Integer.parseInt(str5);
System.out.println("字符串 '" + str5 + "' 转换为 int: " + num5);
} catch (NumberFormatException e) {
System.out.println("转换 '" + str5 + "' 失败: " + e.getMessage());
}
try {
// 这会抛出 NumberFormatException
int num6 = Integer.parseInt(str6);
System.out.println("字符串 '" + str6 + "' 转换为 int: " + num6);
} catch (NumberFormatException e) {
System.out.println("转换 '" + str6 + "' 失败: " + e.getMessage());
}
}
}
输出结果:
字符串 '123' 转换为 int: 123
类型: int
字符串 '-456' 转换为 int: -456
字符串 '7890' 转换为 int: 7890
------------------------------------
转换 '12a45' 失败: For input string: "12a45"
转换 '' 失败: For input string: ""
转换 '2147483648' 失败: For input string: "2147483648"
其他方法
除了 parseInt(),还有其他几种方式可以实现转换,但它们有不同的用途。
a. Integer.valueOf()
这个方法将字符串转换为 Integer 对象,也就是基本类型 int 的包装类。
语法
public static Integer valueOf(String s) throws NumberFormatException
特点
- 返回值:
Integer对象(一个对象,而不是基本类型)。 - 异常处理:同样会抛出
NumberFormatException。 - 与
parseInt()的区别:parseInt()返回int,而valueOf()返回Integer,在 Java 中,基本类型和对象是不同的。valueOf()会在内部调用parseInt()来完成转换工作。
示例代码
public class ValueOfExample {
public static void main(String[] args) {
String str = "100";
// 使用 valueOf() 转换
Integer integerObj = Integer.valueOf(str);
System.out.println("转换结果: " + integerObj);
System.out.println("类型: " + integerObj.getClass().getSimpleName()); // 输出 Integer
// 如果你需要一个基本类型 int,可以再进行自动拆箱
int primitiveInt = integerObj; // 自动拆箱
System.out.println("拆箱后的基本类型: " + primitiveInt);
System.out.println("拆箱后的类型: " + ((Object)primitiveInt).getClass().getSimpleName()); // 输出 int
}
}
什么时候用 valueOf()?
当你需要一个 Integer 对象(在泛型集合 List<Integer> 中)时,应该使用 valueOf(),如果你只需要一个数字来进行计算,parseInt() 更直接。

b. 使用 Integer 构造函数 (不推荐)
在 Java 9 之前,可以使用 Integer 的构造函数来创建一个 Integer 对象。
// Java 9 之前可用,但已废弃
Integer integerObj = new Integer("123");
为什么不推荐?
- 性能较差:创建一个新对象比调用静态方法要慢。
- 已废弃:从 Java 9 开始,这个构造函数被标记为
@Deprecated,官方文档建议使用parseInt()或valueOf()来替代。
c. 使用 Scanner 类
如果你正在从控制台或文件中读取数据,Scanner 类可以很方便地将读取的字符串直接转换为 int。
示例代码
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个整数: ");
if (scanner.hasNextInt()) { // 检查下一个输入是否是整数
int number = scanner.nextInt(); // 直接读取为 int
System.out.println("你输入的整数是: " + number);
} else {
System.out.println("输入的不是有效的整数。");
}
scanner.close();
}
}
适用场景:主要用于从数据源(如 System.in, 文件)中解析和读取数值,而不是从一个已有的 String 变量转换。

总结与对比
| 方法 | 返回类型 | 是否抛出 NumberFormatException |
主要用途 |
|---|---|---|---|
Integer.parseInt(String) |
int (基本类型) |
是 | 最常用,将字符串转换为基本类型 int,用于数学计算等场景。 |
Integer.valueOf(String) |
Integer (对象) |
是 | 将字符串转换为 Integer 对象,当你需要一个对象时使用(如泛型集合)。 |
new Integer(String) (已废弃) |
Integer (对象) |
是 | 不推荐,性能差,已被 valueOf() 替代。 |
Scanner.nextInt() |
int (基本类型) |
是(如果输入不匹配) | 从 Scanner 的数据源(如控制台)读取并解析下一个 int 值。 |
最佳实践建议
-
如果你需要基本类型
int:直接使用Integer.parseInt()。int myInt = Integer.parseInt(myString);
-
如果你需要一个
Integer对象:使用Integer.valueOf()。Integer myInteger = Integer.valueOf(myString);
-
始终进行异常处理:因为输入的字符串可能无效,所以强烈建议将转换逻辑放在
try-catch块中,以优雅地处理可能的NumberFormatException。try { int number = Integer.parseInt(userInput); // 使用 number 进行后续操作 } catch (NumberFormatException e) { System.out.println("错误:请输入一个有效的数字。"); // 进行错误处理或提示用户重新输入 }
