- 将其他类型转换为
String - 将
String转换为其他类型
将其他类型转换为 String
将基本数据类型或对象转换成 String 类型,有几种常用方法,各有优劣。

使用 String.valueOf() - 最推荐
这是最标准、最安全、性能也最好的方法,它是一个静态方法,可以接受所有基本数据类型和对象作为参数。
特点:
- 通用性强:能处理所有基本类型和
Object。 - 安全:当参数为
null时,它会返回字符串"null",而不会抛出NullPointerException。
示例代码:
int num = 123; double pi = 3.14159; boolean flag = true; char c = 'A'; Object obj = null; // 基本类型转换 String strNum = String.valueOf(num); // "123" String strPi = String.valueOf(pi); // "3.14159" String strFlag = String.valueOf(flag); // "true" String strChar = String.valueOf(c); // "A" // 对象转换 String strObj = String.valueOf(obj); // "null" (不会报错) System.out.println(strNum); System.out.println(strPi); System.out.println(strFlag); System.out.println(strChar); System.out.println(strObj);
使用空字符串拼接 "" + value - 常用但不完美
这是在开发中非常常见的一种写法,利用了 Java 的自动类型转换机制。

特点:
- 简洁:代码最短。
- 有陷阱:当
value为null时,结果会变成字符串"null",这看起来没问题,但有时可能会导致逻辑错误,如果null代表一个无效的 ID,你可能希望得到一个空字符串 而不是"null"。
示例代码:
Integer num = 123; String str = "ID: " + num; // 编译器会自动调用 num.toString() System.out.println(str); // "ID: 123" Object obj = null; String strNull = "" + obj; // 结果是 "null" System.out.println(strNull); // "null"
使用 toString() 方法
所有 Java 对象都继承自 Object 类,而 Object 类中有一个 toString() 方法,任何对象都可以调用 toString() 来获取其字符串表示形式。
特点:
- 面向对象:是对象自身提供的方法。
- 不安全:如果对象是
null,直接调用null.toString()会抛出NullPointerException,这是此方法最大的缺点。
示例代码:
Integer num = 123; String str = num.toString(); // 正确,"123" // --- 危险操作 --- // String strNull = null.toString(); // 抛出 NullPointerException!
最佳实践: 如果你确定对象不为 null,可以使用 toString(),否则,应使用 String.valueOf()。
使用 String.format()
当你需要将一个值嵌入到特定格式的字符串中时,String.format() 非常有用。
示例代码:
int num = 99;
String str = String.format("The number is: %d", num);
System.out.println(str); // "The number is: 99"
将 String 转换为其他类型
将 String 转换为其他类型,通常需要处理 NumberFormatException 异常,因为字符串可能包含无法解析的内容(如字母、符号等)。
转换为基本数据类型
所有基本数据类型都有对应的包装类,这些包装类都提供了 parseXxx(String s) 静态方法。
核心要点:
- 必须有效:
"123"可以转成int,但"abc"不行。 - 前后允许有空格:
" 123 "会被成功解析为123。 - 必须处理异常:使用
try-catch块来捕获NumberFormatException。
示例代码:
String strNum = "123";
String strDouble = "3.14";
String strBool = "true";
String strChar = "A";
String strInvalid = "abc";
// 转换为 int
int num = Integer.parseInt(strNum);
System.out.println("int: " + num);
// 转换为 double
double d = Double.parseDouble(strDouble);
System.out.println("double: " + d);
// 转换为 boolean
// 注意:Boolean.parseBoolean() 对大小写不敏感,"true", "TRUE", "True" 都返回 true
boolean b = Boolean.parseBoolean(strBool);
System.out.println("boolean: " + b);
// 转换为 char
// String没有直接的方法,需要先取第一个字符
char c = strChar.charAt(0);
System.out.println("char: " + c);
// --- 错误处理 ---
try {
int invalidNum = Integer.parseInt(strInvalid);
} catch (NumberFormatException e) {
System.out.println("无法将字符串 '" + strInvalid + "' 转换为整数!");
// e.printStackTrace(); // 打印详细的错误堆栈信息
}
转换为包装类
除了 parseXxx(),包装类还提供了一个非常有用的 valueOf(String s) 方法。
Integer.parseInt() vs Integer.valueOf()
Integer.parseInt(String s):返回一个 基本数据类型int。Integer.valueOf(String s):返回一个Integer对象(包装类),它在内部会先调用parseInt(),然后将结果进行 自动装箱。
示例代码:
String str = "100";
// 返回 int 基本类型
int primitiveInt = Integer.parseInt(str);
System.out.println("primitiveInt: " + primitiveInt + ", type: " + ((Object)primitiveInt).getClass().getName()); // java.lang.Integer
// 返回 Integer 对象
Integer integerObj = Integer.valueOf(str);
System.out.println("integerObj: " + integerObj + ", type: " + integerObj.getClass().getName()); // java.lang.Integer
何时使用?
- 如果你需要一个基本数据类型(例如在计算中),使用
parseInt()。 - 如果你需要一个对象(例如存入
List或作为方法参数),使用valueOf()。
总结与最佳实践
| 转换方向 | 方法 | 优点 | 缺点/注意事项 | 推荐场景 |
|---|---|---|---|---|
| 其他 -> String | String.valueOf() |
安全(处理null)、通用、性能好 | 无 | 首选,几乎所有情况 |
"" + value |
代码简洁 | null 会变成 "null",可能隐藏逻辑错误 |
快速拼接,确保 value 非 null |
|
obj.toString() |
面向对象,直接 | null 对象会抛出 NullPointerException |
确保对象非 null 时 |
|
| String -> 基本类型 | Wrapper.parseXxx() |
直接得到基本类型 | 必须处理 NumberFormatException |
需要基本类型值时 |
| String -> 包装类 | Wrapper.valueOf() |
得到对象,代码更优雅 | 内部调用 parseXxx(),同样需要处理异常 |
需要对象时(如泛型集合) |
new Wrapper(str) |
构造函数方式 | 已被 valueOf() 替代,不推荐 |
避免使用 | |
| String -> char | str.charAt(0) |
简单直接 | 只能取单个字符,且字符串不能为空 | 只需要第一个字符时 |
核心思想:
- 转换时,优先考虑安全性,对于
String.valueOf()和Wrapper.valueOf(),它们对null的处理是明确且安全的。 - 解析时,优先考虑健壮性,将
String转为数字时,一定要用try-catch包裹,防止程序因非法输入而崩溃。 - 理解基本类型和包装类的区别,根据你的需求(是需要一个值还是一个对象)来选择
parseXxx()还是valueOf(),在现代 Java 中,使用包装类(对象)的场景越来越多,尤其是在集合框架和泛型中。
