如何将字符转换为字符串 | Java Debug 笔记

280 阅读2分钟

本文正在参加「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?