可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I want to convert a character array to a string object using the toString() method in java. Here is a snippet of the test code I used:
import java.util.Arrays;
class toString{
public static void main(String[] args){
char[] Array = {\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'};
System.out.println(Array.toString());
}
}
In principle, it should print abcdef, but it is printing random gibberish of the likes of [C@6e1408 or [C@e53108 each time the program executes. I don\'t need an alternative out of this but want to know why this is happening.
回答1:
To get a human-readable toString()
, you must use Arrays.toString()
, like this:
System.out.println(Arrays.toString(Array));
Java\'s toString()
for an array is to print [
, followed by a character representing the type of the array\'s elements (in your case C
for char
), followed by @
then the \"identity hash code\" of the array (think of it like you would a \"memory address\").
This sad state of affairs is generally considered as a \"mistake\" with java.
See this answer for a list of other \"mistakes\".
回答2:
I don\'t know where you get the idea that \"in principle\" it should print \"abcdef\". Where is that documented?
Something like [C@6e1408
is certainly not random gibberish - it\'s the same way of constructing a string from an object as any other type that doesn\'t override toString()
inherits - it\'s a representation of the type ([
indicating an array; C
indicating the char
primitive type) followed by the identity hash code in hex. See the documentation for Object.toString()
for details. As it happens, arrays don\'t override toString
.
If you want [a, b, c, d, e, f]
you can use Arrays.toString(char[])
. If you want abcdef
you can use new String(char[])
.
回答3:
Just use the following commands to get your abcdef array printed
String a= new String(Array);
System.out.println(a);
there you have it problem solved !!
now regarding why is printing the other stuff i think those guys above put some useful links for that.
Ok gotta go !!
回答4:
Because a char array is an array of primitives and toString() will give you it\'s default (which is a hash of the object). Some classes will implement toString() to do cooler things, but primitaves will not.
回答5:
Arrays don\'t override toString
. There\'s a static method: java.util.Arrays.toString
that should solve your problem.
import java.util.Arrays;
class toString {
public static void main(String[] args){
char[] Array = {\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'};
System.out.println(Arrays.toString(Array));
}
}
回答6:
The default implementation of the toString method of the char [] class returns a String representation of the base address of the array, which is what is being printed here. We cannot change it, since the class of char [] is not extendable.
回答7:
char[] Array = { \'a\', \'b\', \'c\', \'d\', \'e\', \'f\' };
System.out.println(Array);
It should print abcdef
.
回答8:
There is a spelling mistake of \"Array.toString()\" to \"Arrays.toString(Array)\" I guess so, and instead of writing name.toString(), pass the name as an argument and Write as above.
回答9:
this way I found worked:
public String convertToString(char[] array, int length)
{
String char_string;
String return_string=\"\";
int i;
for(i=0;i<length;i++)
{
char_string=Character.toString(array[i]);
return_string=return_string.concat(char_string);
}
return return_string;
}