一尘不染

Java 如何将字符转换为字符串?

java

我有一个char,我需要一个String。如何从一个转换为另一个?


阅读 416

收藏
2020-03-15

共2个答案

一尘不染

好问题。我有以下五种 6种方法可以做到这一点。

// #1
String stringValueOf = String.valueOf('c'); // most efficient

// #2
String stringValueOfCharArray = String.valueOf(new char[]{x});

// #3
String characterToString = Character.toString('c');

// #4
String characterObjectToString = new Character('c').toString();

// #5
   // Although this method seems very simple, 
   // this is less efficient because the concatenation
   // expands to new StringBuilder().append(x).append("").toString();
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),这又设置了valuechar数组。

public String(char value[]) {
    this.value = Arrays.copyOf(value, value.length);
}

另一方面,String.valueOf(char value)调用以下程序包私有构造函数。

String(char[] value, boolean share) {
    // assert share : "unshared not supported";
    this.value = value;
}

从源代码String.java中的Java 8的源代码

因此String.valueOf(char)似乎是最有效的方法,在这两个存储器和速度方面,用于转换char到String。

2020-03-15
一尘不染

你可以使用Character.toString(char)。请注意,此方法仅返回对的调用String.valueOf(char),该调用也有效。

正如其他人指出的那样,字符串连接也可以用作快捷方式:

String s = "" + 's';

但这可以归结为:

String s = new StringBuilder().append("").append('s').toString();

因为它是低效率的StringBuilder,通过一个备份char[](通过在分配StringBuilder()给16),只对阵列使所得被防守复制String。

String.valueOf(char)通过将char in 包裹在一个单元素数组中并将其传递给package private构造函数来“进入后门” String(char[], boolean),从而避免了数组复制。

2020-03-15