使用 Integer.parseInt() (最常用、最推荐)
这是将 String 转换为 int 最直接、最标准的方法,它属于 java.lang.Integer 类的静态方法。

语法
int intValue = Integer.parseInt(String str);
特点
- 功能:将
String参数解析为一个有符号的十进制整数。 - 异常:
String不是有效的整数表示形式,会抛出NumberFormatException。 - 空值处理:如果传入
null,会抛出NullPointerException。
代码示例
public class StringToIntExample {
public static void main(String[] args) {
// 1. 基本转换
String str1 = "123";
int num1 = Integer.parseInt(str1);
System.out.println("字符串 '" + str1 + "' 转换为整数: " + num1); // 输出: 123
// 2. 带符号的转换
String str2 = "-456";
int num2 = Integer.parseInt(str2);
System.out.println("字符串 '" + str2 + "' 转换为整数: " + num2); // 输出: -456
// 3. 包含空格的字符串 (会失败)
String str3 = " 789 ";
// Integer.parseInt(str3); // 这行代码会抛出 NumberFormatException
// 解决方案:先使用 trim() 去除首尾空格
int num3 = Integer.parseInt(str3.trim());
System.out.println("字符串 '" + str3 + "' 去除空格后转换为整数: " + num3); // 输出: 789
// 4. 无效的字符串 (会抛出异常)
String str4 = "abc123";
try {
int num4 = Integer.parseInt(str4);
System.out.println(num4);
} catch (NumberFormatException e) {
System.out.println("错误: 字符串 '" + str4 + "' 不是有效的整数格式。"); // 输出错误信息
}
// 5. 处理 null 值 (会抛出异常)
String str5 = null;
try {
int num5 = Integer.parseInt(str5);
System.out.println(num5);
} catch (NullPointerException e) {
System.out.println("错误: 输入的字符串为 null。"); // 输出错误信息
}
}
}
使用 Integer.valueOf()
这个方法也可以将 String 转换为 int,但它返回的是一个 Integer 对象(即 int 的包装类型),而不是原始的 int 类型。
语法
Integer integerValue = Integer.valueOf(String str);
特点
- 功能:将
String参数解析为一个Integer对象。 - 异常:与
parseInt()一样,如果格式无效或输入为null,会抛出NumberFormatException或NullPointerException。 - 返回类型:
Integer(对象类型)。 - 性能:由于它会返回一个对象,如果你只需要一个原始的
int值,parseInt()的性能会更好,因为它避免了自动拆箱的过程。valueOf()返回的对象可能会被 Java 的自动装箱机制缓存,从而在某些情况下提高内存效率。
代码示例
public class StringToIntegerObjectExample {
public static void main(String[] args) {
String str = "101";
// 使用 valueOf() 获取 Integer 对象
Integer integerObj = Integer.valueOf(str);
System.out.println("使用 valueOf() 获取的 Integer 对象: " + integerObj);
// 如果你需要 int 值,系统会自动进行“拆箱”
int num = integerObj;
System.out.println("自动拆箱后的 int 值: " + num);
// 也可以直接链式调用
int num2 = Integer.valueOf(str); // 编译器会自动将 Integer 拆箱为 int
System.out.println("链式调用后的 int 值: " + num2);
}
}
如何选择 parseInt() 和 valueOf()?
- 如果你明确需要一个原始的
int类型,请使用Integer.parseInt(),这是最清晰、最高效的选择。 - 如果你需要一个
Integer对象(用于泛型集合List<Integer>),请使用Integer.valueOf()。
使用 Scanner.nextInt()
如果你正在从用户输入(如控制台)或文件中读取数据,Scanner 类是一个很好的工具,它可以直接将输入的下一个标记解析为 int。
语法
Scanner scanner = new Scanner(System.in); int intValue = scanner.nextInt();
特点
- 功能:从扫描器的输入中扫描下一个
int值。 - 异常:
- 如果下一个标记不是有效的
int值,抛出InputMismatchException。 - 如果输入结束,没有可用标记,抛出
NoSuchElementException。 - 如果此扫描器被关闭,抛出
IllegalStateException。
- 如果下一个标记不是有效的
- 用途:主要用于解析流式输入(如
System.in, 文件等)。
代码示例
import java.util.Scanner;
public class ScannerToIntExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个整数: ");
try {
// 读取用户输入并转换为 int
int number = scanner.nextInt();
System.out.println("你输入的整数是: " + number);
} catch (Exception e) {
System.out.println("输入无效,请输入一个有效的整数。");
} finally {
// 关闭 Scanner,防止资源泄漏
scanner.close();
}
}
}
使用 NumberFormat 或 DecimalFormat (处理国际化)
如果你的字符串可能包含千位分隔符(如 "1,000")或者需要根据特定地区的格式进行解析,NumberFormat 是更好的选择。

代码示例
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;
public class NumberFormatToIntExample {
public static void main(String[] args) {
// 假设字符串是美国格式,包含逗号
String usStr = "1,234,567";
// 创建一个美国地区的数字格式器
NumberFormat usFormat = NumberFormat.getInstance(Locale.US);
try {
// parse() 方法返回的是 Number,需要强制转换为 Integer
Number number = usFormat.parse(usStr);
int intValue = number.intValue();
System.out.println("美国格式字符串 '" + usStr + "' 转换为整数: " + intValue); // 输出: 1234567
} catch (ParseException e) {
System.out.println("解析失败: " + e.getMessage());
}
// 中国格式字符串 (不含逗号)
String cnStr = "890123";
NumberFormat cnFormat = NumberFormat.getInstance(Locale.CHINA);
try {
Number number = cnFormat.parse(cnStr);
int intValue = number.intValue();
System.out.println("中国格式字符串 '" + cnStr + "' 转换为整数: " + intValue); // 输出: 890123
} catch (ParseException e) {
System.out.println("解析失败: " + e.getMessage());
}
}
}
总结与最佳实践
| 方法 | 返回类型 | 主要用途 | 优点 | 缺点 |
|---|---|---|---|---|
Integer.parseInt() |
int (原始类型) |
通用,从 String 转 int | 最直接,性能最好 | 抛出 NumberFormatException,需要处理异常 |
Integer.valueOf() |
Integer (对象类型) |
需要 Integer 对象时 |
可用于泛型,可能利用缓存 | 比直接 parseInt 多一层对象操作 |
Scanner.nextInt() |
int (原始类型) |
从输入流(如控制台)读取 | 方便处理用户输入 | 专为流设计,不适合单纯转换一个 String |
NumberFormat.parse() |
Number (需转换) |
处理带千位分隔符的国际化数字 | 灵活,支持地区特定格式 | 代码稍复杂,性能较低 |
核心建议:
- 首选
Integer.parseInt():在绝大多数情况下,当你有一个String并想得到一个int时,Integer.parseInt()是最标准、最高效的选择。 - 始终使用
try-catch处理异常:因为输入的String可能无效,所以将转换逻辑放在try-catch块中捕获NumberFormatException是一个健壮编程的必备习惯。 - 处理空格:如果字符串前后可能有空格,先用
String.trim()方法清理一下。 - 处理
null:在转换前,最好检查一下字符串是否为null,以避免NullPointerException。
完整的健壮转换示例
public class RobustStringToInt {
public static int convertToInt(String str) {
// 1. 首先检查是否为 null 或空字符串
if (str == null || str.trim().isEmpty()) {
// 可以抛出自定义异常或返回一个默认值,这里我们返回 0 作为示例
return 0;
}
// 2. 去除首尾空格
String trimmedStr = str.trim();
// 3. 尝试转换,并捕获可能的异常
try {
return Integer.parseInt(trimmedStr);
} catch (NumberFormatException e) {
System.err.println("警告: 无法将字符串 '" + str + "' 转换为整数。");
// 根据业务需求决定如何处理,可以返回默认值或抛出异常
return 0; // 或者 throw new IllegalArgumentException("Invalid number format: " + str);
}
}
public static void main(String[] args) {
System.out.println(convertToInt("123")); // 输出: 123
System.out.println(convertToInt("-456")); // 输出: -456
System.out.println(convertToInt(" 789 ")); // 输出: 789
System.out.println(convertToInt("abc")); // 输出: 0 (并打印警告)
System.out.println(convertToInt(null)); // 输出: 0
System.out.println(convertToInt("")); // 输出: 0
}
}
