How to convert a char to a String?
You can use Character.toString(char)
. Note that this method simply returns a call to String.valueOf(char)
, which also works.
As others have noted, string concatenation works as a shortcut as well:
String s = "" + 's';
But this compiles down to:
String s = new StringBuilder().append("").append('s').toString();
which is less efficient because the StringBuilder
is backed by a char[]
(over-allocated by StringBuilder()
to 16
), only for that array to be defensively copied by the resulting String
.
String.valueOf(char)
"gets in the back door" by wrapping the char
in a single-element array and passing it to the package private constructor String(char[], boolean)
, which avoids the array copy.
I've got of the following five six methods to do it.
// Method #1String stringValueOf = String.valueOf('c'); // most efficient// Method #2String stringValueOfCharArray = String.valueOf(new char[]{x});// Method #3String characterToString = Character.toString('c');// Method #4String characterObjectToString = new Character('c').toString();// Method #5// Although this approach seems very simple, // this is less efficient because the concatenation// expands to a StringBuilder.String concatBlankString = 'c' + "";// Method #6String fromCharArray = new String(new char[]{x});
Note: Character.toString(char) returns String.valueOf(char). So effectively both are same.
String.valueOf(char[] value)
invokes new String(char[] value)
, which in turn sets the value
char array.
public String(char value[]) { this.value = Arrays.copyOf(value, value.length);}
On the other hand String.valueOf(char value)
invokes the following package private constructor.
String(char[] value, boolean share) { // assert share : "unshared not supported"; this.value = value;}
Source code from String.java
in Java 8 source code
Hence
String.valueOf(char)
seems to be most efficient method, in terms of both memory and speed, for convertingchar
toString
.
Sources:
Below are various ways to convert to char c to String s (in decreasing order of speed and efficiency)
char c = 'a';String s = String.valueOf(c); // fastest + memory efficientString 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; // slowest + memory inefficient