- 其他基本数据类型或对象转换为
String String转换为其他基本数据类型或对象
下面我将详细讲解这两种转换的各种方法,并附上示例代码和最佳实践。

其他类型转换为 String
将其他类型转换为字符串有几种常见的方法,各有优缺点。
方法1:使用 String.valueOf()
这是最推荐、最规范的方法,它是一个静态方法,可以接受所有基本数据类型和对象作为参数,并将其转换为字符串。
- 优点:
- 代码清晰易读。
- 可以处理
null值,如果传入null,它会返回字符串"null",而不会抛出NullPointerException。
- 适用场景:所有场景,尤其是需要处理可能为
null的对象时。
int num = 123; double d = 123.45; boolean flag = true; Object obj = null; // 对象可能是 null String str1 = String.valueOf(num); // 结果: "123" String str2 = String.valueOf(d); // 结果: "123.45" String str3 = String.valueOf(flag); // 结果: "true" String str4 = String.valueOf(obj); // 结果: "null" (不会报错)
方法2:使用 toString()
几乎所有 Java 对象都有一个 toString() 方法,用于返回该对象的字符串表示形式。
- 优点:
面向对象,是对象自身的方法。
(图片来源网络,侵删) - 缺点:
- 不能用于基本数据类型(如
int,double等),必须先将它们包装成对应的对象(如Integer,Double)。 - 如果对象是
null,直接调用toString()会抛出NullPointerException。
- 不能用于基本数据类型(如
int num = 123; double d = 123.45; Object obj = null; // 基本类型需要先装箱 String str1 = Integer.valueOf(num).toString(); // 结果: "123" String str2 = Double.valueOf(d).toString(); // 结果: "123.45" // 对于非null对象 String str3 = "Hello".toString(); // 结果: "Hello" // 对于 null 对象,会抛出异常 // String str4 = obj.toString(); // 抛出 NullPointerException
方法3:使用空字符串连接 "" + value
这是一种非常简洁的“语法糖”,在开发中很常见。
- 优点:
- 代码非常简洁。
- 编译器会自动处理基本类型的装箱和调用
toString()。
- 缺点:
value是null,结果会是"null",虽然不会报错,但这可能不是你想要的结果。- 性能上可能略低于
String.valueOf(),因为涉及到创建一个临时的StringBuilder对象。
int num = 123; Object obj = null; String str1 = "" + num; // 结果: "123" String str2 = "" + obj; // 结果: "null"
方法4:使用 String.format()
当你需要将其他类型格式化成特定格式的字符串时,这个方法非常有用。
- 优点:
功能强大,可以指定格式(如小数位数、对齐方式等)。
- 适用场景:需要格式化输出的场景。
int num = 123;
double d = 123.4567;
String str1 = String.format("%d", num); // 结果: "123"
String str2 = String.format("%.2f", d); // 结果: "123.46" (保留两位小数)
String 转换为其他类型
将字符串转换为其他类型时,最关键的是要处理可能发生的异常,主要是 NumberFormatException。

转换为基本数据类型
对于基本数据类型,通常使用其对应的包装类的 parseXxx() 或 valueOf() 方法。
| 目标类型 | 推荐方法 | 示例 | 异常 |
|---|---|---|---|
int |
Integer.parseInt() |
int num = Integer.parseInt("123"); |
NumberFormatException |
long |
Long.parseLong() |
long l = Long.parseLong("123L"); |
NumberFormatException |
double |
Double.parseDouble() |
double d = Double.parseDouble("123.45"); |
NumberFormatException |
float |
Float.parseFloat() |
float f = Float.parseFloat("123.45f"); |
NumberFormatException |
boolean |
Boolean.parseBoolean() |
boolean b = Boolean.parseBoolean("true"); |
不会抛出 NumberFormatException,"true" (不区分大小写) 返回 true,其他任何字符串都返回 false。 |
重要提示:
parseXxx()方法要求字符串内容必须完全匹配数字的格式,否则会抛出NumberFormatException。Boolean.parseBoolean()比较特殊,它对字符串内容不挑剔,只要不是true,就返回false。- 空字符串 () 也会导致
NumberFormatException。
String intStr = "100";
String doubleStr = "99.99";
String boolStr = "TRUE";
String invalidStr = "abc";
try {
int i = Integer.parseInt(intStr); // 成功, i = 100
double d = Double.parseDouble(doubleStr); // 成功, d = 99.99
boolean b = Boolean.parseBoolean(boolStr); // 成功, b = true
// Integer.parseInt(invalidStr); // 抛出 NumberFormatException
// Integer.parseInt(""); // 抛出 NumberFormatException
} catch (NumberFormatException e) {
System.err.println("无法将字符串转换为数字: " + e.getMessage());
}
转换为包装类
包装类除了 parseXxx(),还有 valueOf() 方法,它们的功能几乎一样,valueOf() 内部也是调用了 parseXxx(),但返回的是包装类对象而不是基本类型。
String str = "123"; Integer numObj = Integer.valueOf(str); // 返回 Integer 对象 Long longObj = Long.valueOf(str); // 返回 Long 对象 // 可以自动拆箱 (unboxing) int num = Integer.valueOf(str); // num 是基本类型 int
转换为其他对象(如 Date)
对于自定义对象或特定类型的对象(如 Date, LocalDateTime),通常使用它们的构造方法或静态的 parse() 方法,这些方法通常有自己特定的字符串格式要求。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
// 将字符串转换为 LocalDate (Java 8+)
String dateStr = "2025-10-27";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = LocalDate.parse(dateStr, formatter);
System.out.println(date); // 输出: 2025-10-27
安全转换的最佳实践
在实际开发中,进行字符串转换时必须考虑健壮性。
使用 try-catch 处理异常
这是最基本也是最安全的做法,可以防止程序因无效输入而崩溃。
public static int safeParseInt(String str, int defaultValue) {
try {
return Integer.parseInt(str);
} catch (NumberFormatException e) {
// 如果转换失败,返回一个默认值
return defaultValue;
}
}
// 使用示例
String input = "123a";
int number = safeParseInt(input, -1); // number 的值将是 -1
System.out.println(number);
使用 Apache Commons Lang 或 Guava 库
这些第三方库提供了更强大、更方便的工具类,可以简化很多操作。
使用 Apache Commons Lang 的 NumberUtils:
// 添加依赖: org.apache.commons:commons-lang3
import org.apache.commons.lang3.math.NumberUtils;
String str = "123";
if (NumberUtils.isParsable(str)) {
int num = NumberUtils.toInt(str, 0); // 转换失败返回默认值 0
System.out.println(num);
}
使用 Google Guava 的 Ints:
// 添加依赖: com.google.guava:guava import com.google.common.primitives.Ints; String str = "123"; Integer num = Ints.tryParse(str); // 转换失败返回 null System.out.println(num); // 也可以指定默认值 int numWithDefault = Ints.tryParse(str, -1); System.out.println(numWithDefault);
总结表格
| 转换方向 | 推荐方法 | 示例 | 备注 |
|---|---|---|---|
任意类型 → String |
String.valueOf() |
String.valueOf(123) |
首选,安全、规范,可处理 null |
"" + 123 |
简洁,但性能略低,null 会变成 "null" |
||
obj.toString() |
"hello".toString() |
面向对象,但 null 会报错,不能用于基本类型 |
|
String → int |
Integer.parseInt() |
Integer.parseInt("123") |
抛出 NumberFormatException |
String → Integer |
Integer.valueOf() |
Integer.valueOf("123") |
抛出 NumberFormatException |
String → double |
Double.parseDouble() |
Double.parseDouble("123.45") |
抛出 NumberFormatException |
String → boolean |
Boolean.parseBoolean() |
Boolean.parseBoolean("true") |
不会抛出异常,非 true 都返回 false |
String → 其他对象 |
对象的.parse() 或构造方法 |
LocalDate.parse("...") |
依赖特定类的解析规则 |
希望这份详细的总结能帮助你完全掌握 Java 中的字符串类型转换!
