核心概念
String: 字符串,是一个对象,用于表示一串字符。"123"。int: 基本数据类型,用于存储一个 32 位的整数。123。
它们一个是对象,一个是基本类型,不能直接进行数学运算或比较,因此必须进行转换。

String 转 int
将 String 类型的数字字符串转换为 int 类型,主要有两种常用方法。
方法 1:使用 Integer.parseInt()
这是最直接、最常用的方法,它会尝试将一个 String 解析为 int 类型。
语法:
int number = Integer.parseInt(String str);
示例代码:

String strNumber = "123";
int intNumber = Integer.parseInt(strNumber);
System.out.println("intNumber 的值: " + intNumber);
System.out.println("intNumber 的类型: " + ((Object)intNumber).getClass().getName());
// 输出: intNumber 的类型: int
⚠️ 重要:异常处理
String 不是由纯数字组成的,Integer.parseInt() 会抛出 NumberFormatException 异常,在实际开发中,必须使用 try-catch 块来处理这种潜在的错误。
安全转换示例:
String input = "456";
String invalidInput = "abc123";
// 正常情况
try {
int num1 = Integer.parseInt(input);
System.out.println("转换成功: " + num1);
} catch (NumberFormatException e) {
System.out.println("错误: '" + input + "' 不是有效的整数。");
}
// 异常情况
try {
int num2 = Integer.parseInt(invalidInput);
System.out.println("转换成功: " + num2); // 这行代码不会执行
} catch (NumberFormatException e) {
System.out.println("错误: '" + invalidInput + "' 不是有效的整数。");
// e.printStackTrace(); // 可以打印出详细的错误堆栈信息
}
方法 2:使用 Integer.valueOf()
这个方法也会将 String 转换为 int,但它返回的是一个 Integer 对象(int 的包装类)。

语法:
Integer integerObject = Integer.valueOf(String str);
示例代码:
String strNumber = "789";
Integer integerObj = Integer.valueOf(strNumber);
// 如果需要得到基本类型 int,可以再调用 .intValue()
int intNumber = integerObj.intValue();
System.out.println("integerObject 的值: " + integerObj);
System.out.println("integerObject 的类型: " + integerObj.getClass().getName()); // 输出: java.lang.Integer
System.out.println("intNumber 的值: " + intNumber);
System.out.println("intNumber 的类型: " + ((Object)intNumber).getClass().getName()); // 输出: int
与 parseInt 的区别:
parseInt():直接返回基本数据类型int。valueOf():返回包装类Integer对象。
在需要 int 类型时,通常推荐使用 Integer.parseInt(),因为它更直接,避免了额外的对象创建,但在某些需要对象引用的场景(例如泛型集合 List<Integer>),Integer.valueOf() 更合适。
int 转 String
将 int 类型转换为 String 类型,有几种方法,其中最推荐的是第一种。
方法 1:使用 String.valueOf() (推荐)
这是最简洁、最高效的方法,它不会创建不必要的中间对象。
语法:
String str = String.valueOf(int number);
示例代码:
int number = 100;
String strNumber = String.valueOf(number);
System.out.println("strNumber 的值: " + strNumber);
System.out.println("strNumber 的类型: " + strNumber.getClass().getName()); // 输出: java.lang.String
方法 2:使用 Integer.toString()
这个方法通过 int 的包装类 Integer 来实现转换。
语法:
String str = Integer.toString(int number);
示例代码:
int number = 200;
String strNumber = Integer.toString(number);
System.out.println("strNumber 的值: " + strNumber);
System.out.println("strNumber 的类型: " + strNumber.getClass().getName()); // 输出: java.lang.String
方法 3:使用字符串拼接(简单但不推荐用于生产)
这是一种“取巧”的方法,通过将 int 与一个空字符串 相连,利用 Java 的自动类型转换机制得到 String。
语法:
String str = "" + int number;
示例代码:
int number = 300;
String strNumber = "" + number;
System.out.println("strNumber 的值: " + strNumber);
System.out.println("strNumber 的类型: " + strNumber.getClass().getName()); // 输出: java.lang.String
为什么不推荐?
虽然这种方法代码简单,但在底层,它会先创建一个 StringBuilder 对象,然后进行拼接,对于简单的转换,性能差异不大,但在性能敏感的代码或频繁调用的场景下,String.valueOf() 或 Integer.toString() 是更优的选择,因为它们更明确且经过高度优化。
总结与对比
| 转换方向 | 推荐方法 | 语法 | 说明 |
|---|---|---|---|
| String → int | Integer.parseInt() |
int num = Integer.parseInt("123"); |
最直接,返回基本类型 int。必须处理 NumberFormatException。 |
Integer.valueOf() |
Integer num = Integer.valueOf("123"); |
返回 Integer 对象,适用于需要对象引用的场景。 |
|
| int → String | String.valueOf() |
String str = String.valueOf(123); |
最推荐,简洁高效,性能好。 |
Integer.toString() |
String str = Integer.toString(123); |
同样高效,非常明确。 | |
| 字符串拼接 | String str = "" + 123; |
简单易读,但底层有性能开销,不推荐用于生产环境。 |
实际应用场景示例
场景:从控制台读取用户输入的两个数字,然后计算它们的和。
import java.util.Scanner;
public class StringToIntExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入第一个整数: ");
String input1 = scanner.nextLine();
System.out.print("请输入第二个整数: ");
String input2 = scanner.nextLine();
// 1. 将 String 转换为 int
try {
int num1 = Integer.parseInt(input1);
int num2 = Integer.parseInt(input2);
// 2. 进行数学计算
int sum = num1 + num2;
// 3. 将 int 结果转换回 String 用于输出
String result = "计算结果是: " + String.valueOf(sum);
System.out.println(result);
} catch (NumberFormatException e) {
System.out.println("输入错误:请确保输入的是有效的整数!");
} finally {
scanner.close(); // 关闭 Scanner,释放资源
}
}
}
这个例子完美地展示了 String 转 int 和 int 转 String 的完整流程,并强调了异常处理的重要性。
