本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看 活动链接
问题
如何将字符转换为字符串?
假设我有一个字符,但是我想得到一个字符串,该如何转换?
回答
回答 1
可以使用 Character.toString(char)
,但请注意,该方法只是返回对 String.valueOf(char)
的调用。
此外,我们也可以使用字符串连接的方式,如下:
char ch = 's';
String str = ch + "";
它实际上是通过如下方式转化而来:
char ch = 's';
String str = new StringBuilder().append(ch).append("").toString();
由于 StringBuilder
的实质其实是一个字符数组 char[]
,因此它的效率较低。
而 String.valueOf(char)
的方式是将 char
包装在一个单元素的数组中,并将其传递给包的私有构造函数 String(char[], boolean)
,从而避免了数组副本,提高了效率。
回答 2
问得好!下面我将给出 6 种解决方案:
// #1
String stringValueOf = String.valueOf('c'); // 效率最高
// #2
String stringValueOfCharArray = String.valueOf(new char[]{x});
// #3
String characterToString = Character.toString('c');
// #4
String characterObjectToString = new Character('c').toString();
// #5
// 该方式虽然简单,但是效率较低
String concatBlankString = 'c' + "";
// #6
String fromCharArray = new String(new char[]{x});
注意:
Character.toString(char)
返回的是String.valueOf(char)
的调用,所以两者效率相同。
String.valueOf(char[] value)
调用了 new String(char[] value)
,而后者其实就是设置了一个字符数组 value
。
public String(char[] value){
this.value = Arrays.copyOf(value, value.length);
}
另一方面,String.valueOf(char value)
也调用了如下包的私有构造方法:
String(char[] value, boolean share){
this.value = value;
}
因此,从内存和速度方面综合来看,
String.valueOf(char)
是将字符转换为字符串的最佳方案!
回答 3
以下是将字符转换为字符串的各种方法(按速度和效率的递减排序):
char c = 'a';
String s = String.valueOf(c); // 最高效
String s = Character.toString(c);
String s = new String(new char[]{c});
String s = String.valueOf(new char[]{c});
String s = new Character(c).toString();
String s = "" + c; // 最低效
出处
文章翻译自 Stack Overflow:java - How to convert a char to a String?