最常用和推荐的方法: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 = "789abc"; // 无效格式
String str4 = ""; // 空字符串
String str5 = "2147483648"; // 超出 int 范围
// 成功转换的例子
int num1 = Integer.parseInt(str1);
System.out.println("字符串 '" + str1 + "' 转换为 int: " + num1);
int num2 = Integer.parseInt(str2);
System.out.println("字符串 '" + str2 + "' 转换为 int: " + num2);
// 处理可能出现的异常
try {
// 尝试转换一个无效的字符串
int num3 = Integer.parseInt(str3);
System.out.println(num3);
} catch (NumberFormatException e) {
System.out.println("错误: 无法将 '" + str3 + "' 转换为整数。");
}
try {
// 尝试转换一个空字符串
int num4 = Integer.parseInt(str4);
System.out.println(num4);
} catch (NumberFormatException e) {
System.out.println("错误: 无法将空字符串转换为整数。");
}
try {
// 尝试转换一个超出范围的数字
int num5 = Integer.parseInt(str5);
System.out.println(num5);
} catch (NumberFormatException e) {
System.out.println("错误: 数字 '" + str5 + "' 超出 int 类型的范围。");
}
}
}
输出结果:
字符串 '123' 转换为 int: 123
字符串 '-456' 转换为 int: -456
错误: 无法将 '789abc' 转换为整数。
错误: 无法将空字符串转换为整数。
错误: 数字 '2147483648' 超出 int 类型的范围。
处理 NumberFormatException 的最佳实践
在实际开发中,你几乎总是需要处理 NumberFormatException,一个健壮的转换函数应该包含这个逻辑。
public static int safeStringToInt(String str, int defaultValue) {
if (str == null || str.trim().isEmpty()) {
return defaultValue; // 如果字符串为空或null,返回一个默认值
}
try {
return Integer.parseInt(str.trim());
} catch (NumberFormatException e) {
return defaultValue; // 如果转换失败,返回一个默认值
}
}
public static void main(String[] args) {
String validNumber = "101";
String invalidNumber = "hello";
String nullString = null;
String emptyString = "";
System.out.println("safeStringToInt('" + validNumber + "') = " + safeStringToInt(validNumber, -1));
System.out.println("safeStringToInt('" + invalidNumber + "') = " + safeStringToInt(invalidNumber, -1));
System.out.println("safeStringToInt(" + nullString + ") = " + safeStringToInt(nullString, -1));
System.out.println("safeStringToInt('" + emptyString + "') = " + safeStringToInt(emptyString, -1));
}
输出结果:
safeStringToInt('101') = 101
safeStringToInt('hello') = -1
safeStringToInt(null) = -1
safeStringToInt('') = -1
其他方法
Integer.valueOf()
这个方法也可以将字符串转换为 int,但它有一个关键区别。

语法
public static Integer valueOf(String s) throws NumberFormatException
特点
- 返回值:
Integer对象(即int的包装类型),而不是基本类型int。 - 性能:由于它会返回一个
Integer对象,所以涉及到自动装箱(Autoboxing),在需要int的地方,JVM 会自动将其转换为int。 - 缓存:
Integer.valueOf()会利用Integer的缓存机制(在-128到127的范围内),返回一个预先创建好的对象,这比new Integer()更高效,但对于parseInt(),它直接返回基本类型,没有对象创建的开销。
何时使用?
- 当你需要一个
Integer对象时(在泛型集合List<Integer>中)。 - 当你不关心性能差异(对于大多数应用来说,
parseInt和valueOf的性能差异可以忽略不计)时。
示例
String str = "100"; // 使用 parseInt(),得到基本类型 int int primitiveInt = Integer.parseInt(str); System.out.println(primitiveInt); // 输出: 100 System.out.println(primitiveInt.getClass().getName()); // 输出: int // 使用 valueOf(),得到 Integer 对象 Integer integerObject = Integer.valueOf(str); System.out.println(integerObject); // 输出: 100 System.out.println(integerObject.getClass().getName()); // 输出: java.lang.Integer
处理非十进制进制(如二进制、十六进制)
如果字符串是其他进制表示的数字,你需要告诉 parseInt 使用哪个基数(radix)。
语法
public static int parseInt(String s, int radix) throws NumberFormatException
radix是进制,范围在Character.MIN_RADIX(2) 到Character.MAX_RADIX(36) 之间。radix为 10,可以省略,效果与parseInt(String s)相同。
示例
public class StringToIntRadixExample {
public static void main(String[] args) {
// 十六进制 (Hexadecimal)
String hexStr = "FF";
int hexValue = Integer.parseInt(hexStr, 16);
System.out.println("十六进制 '" + hexStr + "' 转换为十进制: " + hexValue); // 输出: 255
// 二进制 (Binary)
String binStr = "1010";
int binValue = Integer.parseInt(binStr, 2);
System.out.println("二进制 '" + binStr + "' 转换为十进制: " + binValue); // 输出: 10
// 八进制 (Octal)
String octStr = "20";
int octValue = Integer.parseInt(octStr, 8);
System.out.println("八进制 '" + octStr + "' 转换为十进制: " + octValue); // 输出: 16
}
}
总结与最佳实践
| 方法 | 返回类型 | 是否抛出异常 | 适用场景 |
|---|---|---|---|
Integer.parseInt(String s) |
int (基本类型) |
是 (NumberFormatException) |
首选,当你明确需要一个基本类型 int 时,性能最好。 |
Integer.valueOf(String s) |
Integer (对象) |
是 (NumberFormatException) |
当你需要一个 Integer 对象时(用于泛型集合)。 |
Integer.parseInt(String s, int radix) |
int (基本类型) |
是 (NumberFormatException)) |
当你需要解析非十进制(如二进制、十六进制)的字符串时。 |
核心建议:
- 默认使用
Integer.parseInt():在绝大多数情况下,这是最直接、最高效的选择。 - 总是处理异常:使用
try-catch块来捕获NumberFormatException,或者像上面示例中那样编写一个安全的辅助方法,以防止程序因无效输入而崩溃。 - 明确返回类型:如果你需要一个对象(存入
List),则使用Integer.valueOf(),如果你需要一个原始数值用于计算,则使用Integer.parseInt()。

