TL;DR)
| 方法 | 示例 | 推荐度 | 说明 |
|---|---|---|---|
String.valueOf(char) |
String str = String.valueOf('a'); |
⭐⭐⭐⭐⭐ | 最推荐,清晰、明确,是专门为这个目的设计的静态方法。 |
Character.toString(char) |
String str = Character.toString('a'); |
⭐⭐⭐⭐ | 非常推荐,同样清晰,是 Character 类的实例方法。 |
new String(char[]) |
String str = new String(new char[]{'a'}); |
⭐⭐ | 可用,但略显笨重,因为需要创建一个 char 数组。 |
| 字符串拼接 | String str = "" + 'a'; |
⭐⭐ | 简单,但会创建一个临时的 StringBuilder 对象,在性能敏感的循环中可能不理想。 |
Character.toString() |
String str = 'a'.toString(); |
❌ | 错误! char 是基本类型,没有 .toString() 方法,这是初学者常见的错误。 |
推荐方法:String.valueOf(char)
这是最直接、最清晰且官方推荐的方法。String 类提供了一个重载的 valueOf() 方法,专门用于将各种基本数据类型(包括 char)转换成 String。

示例代码:
char myChar = 'A'; // 使用 String.valueOf() 进行转换 String myString = String.valueOf(myChar); System.out.println(myString); // 输出: A System.out.println(myString.getClass().getName()); // 输出: java.lang.String
优点:
- 代码可读性强:一眼就能看出意图是将一个值转换为字符串。
- 性能良好:这是 Java 标准库为此目的提供的标准方法,经过优化。
- 不会抛出
NullPointerException:因为它是静态方法,即使String类对象为null,它也能正常工作(传入的char不会是null)。
推荐方法:Character.toString(char)
这是另一种非常优秀的方法。Character 类是 char 的包装类,它提供了一个 toString() 方法,可以将包装的 char 值转换成 String。
示例代码:

char myChar = 'B'; // 使用 Character.toString() 进行转换 String myString = Character.toString(myChar); System.out.println(myString); // 输出: B System.out.println(myString.getClass().getName()); // 输出: java.lang.String
优点:
- 代码可读性强:与
String.valueOf()一样,意图非常明确。 - 性能良好:同样是标准库方法,效率很高。
可用但稍显冗余的方法:new String(char[])
String 类的构造函数可以接受一个 char 数组,并用数组中的字符创建一个新的字符串,如果你想把一个单独的 char 转成 String,你需要先把它放进一个只有一个元素的数组里。
示例代码:
char myChar = 'C';
// 创建一个包含 myChar 的数组,然后用它来构造 String
String myString = new String(new char[]{myChar});
System.out.println(myString); // 输出: C
缺点:

- 代码冗长:需要创建一个
char数组,显得有些笨拙。 - 性能略低:相比前两种方法,它多了一步创建数组的开销。
适用场景:当你已经有一个 char 数组时,这个方法就非常合适了。new String(charArray, offset, count)。
简单但不推荐用于性能敏感场景的方法:字符串拼接 ()
你可以通过将 char 与一个空字符串 进行拼接来隐式地将其转换为 String。
示例代码:
char myChar = 'D'; // 使用字符串拼接 String myString = "" + myChar; System.out.println(myString); // 输出: D
底层原理:
Java 编译器在遇到这种拼接操作时,会自动将其优化为使用 StringBuilder,上面的代码实际上等价于:
// 编译器生成的代码(大致如此)
String myString = new StringBuilder().append("").append('D').toString();
缺点:
- 性能开销:在单次操作中,这种开销微不足道,但在循环中,频繁地创建和销毁
StringBuilder对象会严重影响性能。 - 可读性稍差:虽然简单,但不如
String.valueOf()或Character.toString()那么直接地表达了“转换”的意图。
常见错误:char.toString()
这是一个非常初级的错误,很多新手会犯。char 是 Java 的基本数据类型,而不是对象,因此它本身没有方法(包括 toString())。
错误代码:
char myChar = 'E'; // 错误!编译不通过 // String myString = myChar.toString(); // Error: cannot find symbol: method toString()
正确的做法是,使用 char 的包装类 Character 来调用 toString():
// 正确的方式 String myString = Character.toString(myChar);
性能对比(简单总结)
对于单次转换,String.valueOf() 和 Character.toString() 在性能上几乎没有差别,并且都远优于 new String(char[]) 和字符串拼接。
在循环中进行大量转换时,String.valueOf() 和 Character.toString() 是最佳选择。
最终建议
| 场景 | 推荐方法 |
|---|---|
| 绝大多数情况 | String.valueOf(char) 或 Character.toString(char),两者皆可,选择你个人更喜欢的风格。 |
已有 char 数组 |
new String(charArray)。 |
| 快速、临时的单次转换 | 可以使用 "" + char,但为了代码的清晰和一致性,不推荐。 |
| 避免 | char.toString()。 |
