核心方法
Integer.parseInt(String s)
这是最常用、最直接的方法,它会尝试将一个 String 参数解析为一个有符号的十进制整数。

特点:
- 静态方法:直接通过
Integer类调用,如Integer.parseInt("123")。 - 抛出异常:
String不是有效的整数表示,它会抛出NumberFormatException,这是你需要处理的最常见异常。 - 返回值:返回一个基本数据类型
int。
示例代码:
public class StringToIntExample {
public static void main(String[] args) {
String str1 = "123";
String str2 = "-456";
String str3 = "789abc"; // 无效的数字字符串
try {
// 成功转换
int num1 = Integer.parseInt(str1);
System.out.println("转换成功: " + str1 + " -> " + num1);
int num2 = Integer.parseInt(str2);
System.out.println("转换成功: " + str2 + " -> " + num2);
// 尝试转换无效字符串
int num3 = Integer.parseInt(str3); // 这里会抛出异常
System.out.println("转换成功: " + str3 + " -> " + num3);
} catch (NumberFormatException e) {
System.out.println("错误: 无法将字符串 '" + str3 + "' 转换为整数。");
// e.printStackTrace(); // 打印详细的异常堆栈信息
}
}
}
输出:
转换成功: 123 -> 123
转换成功: -456 -> -456
错误: 无法将字符串 '789abc' 转换为整数。
Integer.valueOf(String s)
这个方法也用于将 String 转换为 Integer 对象,它内部也调用了 parseInt 方法。

特点:
- 静态方法:通过
Integer类调用,如Integer.valueOf("123")。 - 返回值:返回一个
Integer对象,而不是基本数据类型int,这在需要使用对象(例如在集合List<Integer>中)时非常有用。 - 抛出异常:同样,如果字符串无效,会抛出
NumberFormatException。 - 缓存:
valueOf方法会缓存一定范围内的Integer对象(通常是 -128 到 127),这可以提高性能并减少内存开销。
示例代码:
public class StringToIntegerObjectExample {
public static void main(String[] args) {
String str = "200";
// 使用 valueOf 得到一个 Integer 对象
Integer integerObj = Integer.valueOf(str);
System.out.println("转换结果是一个对象: " + integerObj);
System.out.println("对象的类型: " + integerObj.getClass().getName());
// 你可以像使用 int 一样使用这个对象(自动拆箱)
int num = integerObj; // 自动拆箱
System.out.println("从对象获取的int值: " + num);
}
}
输出:
转换结果是一个对象: 200
对象的类型: java.lang.Integer
从对象获取的int值: 200
new Integer(String s) (已过时)
这是 Integer 类的一个构造函数,它也可以将 String 转换为 Integer 对象。

特点:
- 构造函数:通过创建新实例来调用,如
new Integer("123")。 - 返回值:返回一个新的
Integer对象。 - 抛出异常:同样会抛出
NumberFormatException。 - 已过时:从 Java 9 开始,这个构造函数被标记为
@Deprecated,官方文档推荐使用Integer.valueOf(String),因为它可以利用缓存,性能更好,并且更符合面向对象的设计(静态工厂方法优于构造函数)。
示例代码 (不推荐使用):
// 不推荐的方式
Integer oldWayObj = new Integer("123");
System.out.println("旧方式创建的对象: " + oldWayObj);
如何选择使用哪个方法?
| 方法 | 返回值 | 是否推荐 | 主要用途 |
|---|---|---|---|
Integer.parseInt() |
int (基本类型) |
是 | 当你需要一个原始的 int 值进行数学计算或赋值给 int 变量时。 |
Integer.valueOf() |
Integer (对象) |
是 | 当你需要一个 Integer 对象时,例如存入 List、Map 等集合,或者需要利用 Integer 的方法。 |
new Integer() |
Integer (对象) |
否 | 已过时,避免使用。 |
- 想要
int,用parseInt()。 - 想要
Integer对象,用valueOf()。
最佳实践与注意事项
始终使用 try-catch 处理异常
这是最重要的一点,如果用户输入或从文件/网络读取的数据可能不是数字,parseInt 和 valueOf 都会失败,如果不处理异常,程序会崩溃。
String userInput = "请输入一个数字"; // 假设这是用户输入
try {
int number = Integer.parseInt(userInput);
System.out.println("你输入的数字是: " + number);
} catch (NumberFormatException e) {
System.out.println("输入无效,请确保输入的是一个整数。");
}
处理带空格的字符串
parseInt 和 valueOf 不能直接处理前后有空格的字符串,它们会抛出 NumberFormatException。
String strWithSpaces = " 123 ";
// 这行代码会抛出异常
// int num = Integer.parseInt(strWithSpaces);
// 正确做法是先使用 trim() 方法去除首尾空格
int num = Integer.parseInt(strWithSpaces.trim());
System.out.println("去除空格后转换: " + num); // 输出: 123
处理非十进制数字
如果字符串是其他进制(如二进制、八进制、十六进制),可以使用 Integer.parseInt(String s, int radix) 的重载方法。
String binaryStr = "1010"; // 二进制的 10
String octalStr = "12"; // 八进制的 10
String hexStr = "A"; // 十六进制的 10
int numFromBinary = Integer.parseInt(binaryStr, 2);
int numFromOctal = Integer.parseInt(octalStr, 8);
int numFromHex = Integer.parseInt(hexStr, 16);
System.out.println("二进制 " + binaryStr + " 转换为十进制是: " + numFromBinary); // 10
System.out.println("八进制 " + octalStr + " 转换为十进制是: " + numFromOctal); // 10
System.out.println("十六进制 " + hexStr + " 转换为十进制是: " + numFromHex); // 10
处理超大数字
int 类型的范围是 -2,147,483,648 到 2,147,483,647,如果字符串表示的数字超出了这个范围,parseInt 会抛出 NumberFormatException。
如果需要处理更大的数字,应该使用 Long.parseLong() 或 BigInteger。
String bigNumberStr = "2147483648"; // 比 Integer.MAX_VALUE 还大 1
// 这会抛出 NumberFormatException
// int num = Integer.parseInt(bigNumberStr);
// 使用 Long 处理更大的范围
long bigNum = Long.parseLong(bigNumberStr);
System.out.println("使用Long转换: " + bigNum); // 输出: 2147483648
// 如果数字可能超过 Long 的范围,使用 BigInteger
import java.math.BigInteger;
String hugeNumberStr = "123456789012345678901234567890";
BigInteger hugeNum = new BigInteger(hugeNumberStr);
System.out.println("使用BigInteger转换: " + hugeNum);
| 场景 | 推荐方法 | 代码示例 |
|---|---|---|
基本需求,需要 int |
Integer.parseInt() |
int num = Integer.parseInt("123"); |
需要 Integer 对象 |
Integer.valueOf() |
Integer num = Integer.valueOf("123"); |
| 字符串可能无效 | try-catch + parseInt 或 valueOf |
try { ... } catch (NumberFormatException e) { ... } |
| 字符串带前后空格 | trim() + parseInt 或 valueOf |
int num = Integer.parseInt(" 123 ".trim()); |
| 非十进制字符串 | Integer.parseInt(s, radix) |
int num = Integer.parseInt("A", 16); |
数字超出 int 范围 |
Long.parseLong() 或 BigInteger |
long num = Long.parseLong("2147483648"); |
