String 转 int (将字符串转换为整数)
有三种主要方法可以实现这个转换。

(图片来源网络,侵删)
Integer.parseInt(String s) - 最常用
这是最直接、最常用的方法,它会尝试将字符串解析为一个有符号的十进制整数。
特点:
- 静态方法:直接通过
Integer类调用。 - 性能高:这是为基本类型转换而优化的方法。
- 抛出异常:如果字符串不是一个有效的整数表示,会抛出
NumberFormatException。
示例代码:
public class StringToIntExample {
public static void main(String[] args) {
// --- 成功的情况 ---
String str1 = "123";
int num1 = Integer.parseInt(str1);
System.out.println("转换成功: " + str1 + " -> " + num1);
System.out.println(num1 + 10); // 输出: 133
// --- 失败的情况 ---
String str2 = "hello";
try {
int num2 = Integer.parseInt(str2);
System.out.println("这行不会被执行");
} catch (NumberFormatException e) {
System.err.println("转换失败: '" + str2 + "' 不是有效的整数。");
}
// --- 其他常见情况 ---
String str3 = " 123 "; // 包含空格
// Integer.parseInt() 无法处理前后的空格,会抛出异常
try {
int num3 = Integer.parseInt(str3);
} catch (NumberFormatException e) {
System.err.println("转换失败: '" + str3 + "' 包含空格,无法直接转换。");
// 解决方案:先使用 trim() 去除空格
int num3_trimmed = Integer.parseInt(str3.trim());
System.out.println("使用 trim() 后转换成功: " + num3_trimmed);
}
String str4 = "123.45"; // 包含小数点
// 会抛出异常
try {
int num4 = Integer.parseInt(str4);
} catch (NumberFormatException e) {
System.err.println("转换失败: '" + str4 + "' 包含小数点,无法转换为 int。");
}
}
}
Integer.valueOf(String s) - 返回 Integer 对象
这个方法功能和 parseInt 类似,但它返回的是一个 Integer 对象(int 的包装类),而不是基本类型 int。

(图片来源网络,侵删)
特点:
- 静态方法。
- 返回
Integer对象:在需要Integer对象的场景下(例如在泛型集合List<Integer>中)非常有用。 - 抛出异常:同样,如果格式无效,会抛出
NumberFormatException。 - 有缓存:在 Java 5 之后,
valueOf会缓存一定范围内的Integer对象(通常是 -128 到 127),这比new Integer()更节省内存。
示例代码:
public class StringToIntegerObjectExample {
public static void main(String[] args) {
String str = "456";
// 返回 Integer 对象
Integer integerObj = Integer.valueOf(str);
// 可以自动拆箱 (unboxing) 为 int 类型
int num = integerObj;
System.out.println("转换成功: " + str + " -> " + num);
// 可以直接用于需要 Integer 对象的地方
java.util.List<Integer> list = new java.util.ArrayList<>();
list.add(Integer.valueOf("789")); // 正确
// list.add(Integer.parseInt("789")); // 编译错误,因为需要 Integer 对象,不是 int
}
}
new Integer(String s) - 已过时
这个构造函数也可以将字符串转换为 Integer 对象,但它已经被标记为 @Deprecated (过时)。
为什么不推荐使用?

(图片来源网络,侵删)
- 性能问题:它总是会创建一个新的
Integer对象,而Integer.valueOf()会利用缓存,更高效。 - 冗余:
Integer.valueOf()提供了相同的功能,但性能更好。
示例代码 (仅作了解):
// 不推荐的用法 String str = "999"; Integer integerObj = new Integer(str); // 编译器会警告
String 转 int
方法
返回类型
是否抛出异常
备注
Integer.parseInt(s)
int (基本类型)
是
最常用,用于需要基本类型的场景。
Integer.valueOf(s)
Integer (对象)
是
推荐,用于需要 Integer 对象的场景,性能优于 new Integer()。
new Integer(s)
Integer (对象)
是
已过时,不推荐使用。
int 转 String (将整数转换为字符串)
有三种主要方法。
String.valueOf(int i) - 最常用、最推荐
这是一个静态方法,可以将任何基本类型或对象转换为 String,它通常被认为是最高效和最清晰的方法。
特点:
- 静态方法。
- 性能好:直接在底层创建字符串,避免了不必要的对象创建。
- 不抛出异常:对于
int 类型,这个方法总是能成功执行。
示例代码:
public class IntToStringExample {
public static void main(String[] args) {
int num = 789;
String str1 = String.valueOf(num);
System.out.println("转换成功: " + num + " -> " + str1);
System.out.println(str1.length()); // 输出: 3
}
}
Integer.toString(int i) - 非常好
这是 Integer 类的一个实例方法,功能与 String.valueOf(int) 完全相同,也是转换 int 到 String 的首选方法之一。
特点:
- 静态方法。
- 性能好:与
String.valueOf(int) 性能相当。
- 不抛出异常。
示例代码:
public class IntToStringExample2 {
public static void main(String[] args) {
int num = 101112;
String str2 = Integer.toString(num);
System.out.println("转换成功: " + num + " -> " + str2);
}
}
空字符串拼接 ("" + i) - 简单但稍慢
这是最直观、最简单的方法,通过将一个整数与一个空字符串连接起来,JVM 会自动将整数转换为字符串。
特点:
- 语法简单。
- 性能稍差:这种方式会创建一个临时的
StringBuilder 对象,虽然现代 JVM 对此优化得很好,但在性能敏感的代码中,前两种方法通常是更好的选择。
- 可读性:一些开发者认为这种方式代码更简洁,另一些则认为它不够明确。
示例代码:
public class IntToStringExample3 {
public static void main(String[] args) {
int num = 202522;
String str3 = "" + num;
System.out.println("转换成功: " + num + " -> " + str3);
}
}
int 转 String
方法
返回类型
备注
String.valueOf(i)
String
强烈推荐,清晰、高效,适用于所有基本类型。
Integer.toString(i)
String
强烈推荐,功能专一,性能同样出色。
"" + i
String
简单直观,性能略逊,但在大多数情况下可以接受。
-
String -> int:
- 如果你需要一个基本类型
int,请使用 Integer.parseInt()。
- 如果你需要一个
Integer 对象,请使用 Integer.valueOf()。
- 永远不要使用
new Integer()。
-
int -> String:
- 优先选择
String.valueOf() 或 Integer.toString(),两者在性能和可读性上都非常出色。
"" + i 是一个方便的快捷方式,但在追求极致性能的代码中,应避免使用。
-
处理异常:
- 当你从用户输入、文件或网络接收字符串并尝试转换为数字时,始终使用
try-catch 块来捕获 NumberFormatException,不要假设输入总是有效的。
// 一个健壮的转换示例
public static int safeStringToInt(String str, int defaultValue) {
if (str == null || str.trim().isEmpty()) {
return defaultValue;
}
try {
return Integer.parseInt(str.trim());
} catch (NumberFormatException e) {
System.out.println("输入 '" + str + "' 无效,使用默认值 " + defaultValue);
return defaultValue;
}
}
public static void main(String[] args) {
int result1 = safeStringToInt(" 123 ", -1); // 成功,返回 123
int result2 = safeStringToInt("abc", -1); // 失败,返回 -1
int result3 = safeStringToInt(null, -1); // 失败,返回 -1
System.out.println("结果1: " + result1);
System.out.println("结果2: " + result2);
System.out.println("结果3: " + result3);
}
| 方法 | 返回类型 | 是否抛出异常 | 备注 |
|---|---|---|---|
Integer.parseInt(s) |
int (基本类型) |
是 | 最常用,用于需要基本类型的场景。 |
Integer.valueOf(s) |
Integer (对象) |
是 | 推荐,用于需要 Integer 对象的场景,性能优于 new Integer()。 |
new Integer(s) |
Integer (对象) |
是 | 已过时,不推荐使用。 |
int 转 String (将整数转换为字符串)
有三种主要方法。
String.valueOf(int i) - 最常用、最推荐
这是一个静态方法,可以将任何基本类型或对象转换为 String,它通常被认为是最高效和最清晰的方法。
特点:
- 静态方法。
- 性能好:直接在底层创建字符串,避免了不必要的对象创建。
- 不抛出异常:对于
int类型,这个方法总是能成功执行。
示例代码:
public class IntToStringExample {
public static void main(String[] args) {
int num = 789;
String str1 = String.valueOf(num);
System.out.println("转换成功: " + num + " -> " + str1);
System.out.println(str1.length()); // 输出: 3
}
}
Integer.toString(int i) - 非常好
这是 Integer 类的一个实例方法,功能与 String.valueOf(int) 完全相同,也是转换 int 到 String 的首选方法之一。
特点:
- 静态方法。
- 性能好:与
String.valueOf(int)性能相当。 - 不抛出异常。
示例代码:
public class IntToStringExample2 {
public static void main(String[] args) {
int num = 101112;
String str2 = Integer.toString(num);
System.out.println("转换成功: " + num + " -> " + str2);
}
}
空字符串拼接 ("" + i) - 简单但稍慢
这是最直观、最简单的方法,通过将一个整数与一个空字符串连接起来,JVM 会自动将整数转换为字符串。
特点:
- 语法简单。
- 性能稍差:这种方式会创建一个临时的
StringBuilder对象,虽然现代 JVM 对此优化得很好,但在性能敏感的代码中,前两种方法通常是更好的选择。 - 可读性:一些开发者认为这种方式代码更简洁,另一些则认为它不够明确。
示例代码:
public class IntToStringExample3 {
public static void main(String[] args) {
int num = 202522;
String str3 = "" + num;
System.out.println("转换成功: " + num + " -> " + str3);
}
}
int 转 String
方法
返回类型
备注
String.valueOf(i)
String
强烈推荐,清晰、高效,适用于所有基本类型。
Integer.toString(i)
String
强烈推荐,功能专一,性能同样出色。
"" + i
String
简单直观,性能略逊,但在大多数情况下可以接受。
-
String -> int:
- 如果你需要一个基本类型
int,请使用 Integer.parseInt()。
- 如果你需要一个
Integer 对象,请使用 Integer.valueOf()。
- 永远不要使用
new Integer()。
-
int -> String:
- 优先选择
String.valueOf() 或 Integer.toString(),两者在性能和可读性上都非常出色。
"" + i 是一个方便的快捷方式,但在追求极致性能的代码中,应避免使用。
-
处理异常:
- 当你从用户输入、文件或网络接收字符串并尝试转换为数字时,始终使用
try-catch 块来捕获 NumberFormatException,不要假设输入总是有效的。
// 一个健壮的转换示例
public static int safeStringToInt(String str, int defaultValue) {
if (str == null || str.trim().isEmpty()) {
return defaultValue;
}
try {
return Integer.parseInt(str.trim());
} catch (NumberFormatException e) {
System.out.println("输入 '" + str + "' 无效,使用默认值 " + defaultValue);
return defaultValue;
}
}
public static void main(String[] args) {
int result1 = safeStringToInt(" 123 ", -1); // 成功,返回 123
int result2 = safeStringToInt("abc", -1); // 失败,返回 -1
int result3 = safeStringToInt(null, -1); // 失败,返回 -1
System.out.println("结果1: " + result1);
System.out.println("结果2: " + result2);
System.out.println("结果3: " + result3);
}
| 方法 | 返回类型 | 备注 |
|---|---|---|
String.valueOf(i) |
String |
强烈推荐,清晰、高效,适用于所有基本类型。 |
Integer.toString(i) |
String |
强烈推荐,功能专一,性能同样出色。 |
"" + i |
String |
简单直观,性能略逊,但在大多数情况下可以接受。 |
-
String->int:- 如果你需要一个基本类型
int,请使用Integer.parseInt()。 - 如果你需要一个
Integer对象,请使用Integer.valueOf()。 - 永远不要使用
new Integer()。
- 如果你需要一个基本类型
-
int->String:- 优先选择
String.valueOf()或Integer.toString(),两者在性能和可读性上都非常出色。 "" + i是一个方便的快捷方式,但在追求极致性能的代码中,应避免使用。
- 优先选择
-
处理异常:
- 当你从用户输入、文件或网络接收字符串并尝试转换为数字时,始终使用
try-catch块来捕获NumberFormatException,不要假设输入总是有效的。
- 当你从用户输入、文件或网络接收字符串并尝试转换为数字时,始终使用
// 一个健壮的转换示例
public static int safeStringToInt(String str, int defaultValue) {
if (str == null || str.trim().isEmpty()) {
return defaultValue;
}
try {
return Integer.parseInt(str.trim());
} catch (NumberFormatException e) {
System.out.println("输入 '" + str + "' 无效,使用默认值 " + defaultValue);
return defaultValue;
}
}
public static void main(String[] args) {
int result1 = safeStringToInt(" 123 ", -1); // 成功,返回 123
int result2 = safeStringToInt("abc", -1); // 失败,返回 -1
int result3 = safeStringToInt(null, -1); // 失败,返回 -1
System.out.println("结果1: " + result1);
System.out.println("结果2: " + result2);
System.out.println("结果3: " + result3);
} 