我想使用java中的toString()方法将字符数组转换为字符串对象。以下是我使用的测试代码的片段:
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());
}
}
原则上,它应该打印 abcdef ,但它会打印 [C @ 6e1408 或 [C @ e53108 每次程序执行。我不需要替代,但想知道为什么会发生这种情况。
答案 0 :(得分:36)
要获得人类可读的toString()
,您必须使用Arrays.toString()
,如下所示:
System.out.println(Arrays.toString(Array));
Java的toString()
用于数组是打印[
,后跟一个表示数组元素类型的字符(在您的情况下C
为char
),其次是通过@
然后是数组的“身份哈希码”(想想它就像你的“内存地址”)。
这种悲惨的状况通常被认为是java的“错误”。
请参阅this answer以获取其他“错误”列表。
答案 1 :(得分:32)
我不知道你在哪里得到“原则上”它应该打印“abcdef”的想法。记录在哪里?
像[C@6e1408
这样的东西肯定是不是随机乱码 - 它与从对象构造字符串的方式相同,就像任何其他不覆盖toString()
的类型一样 - 它表示类型([
表示数组; C
表示char
基元类型),后跟十六进制的标识哈希码。有关详细信息,请参阅documentation for Object.toString()
。碰巧,数组不会覆盖toString
。
如果您需要[a, b, c, d, e, f]
,可以使用Arrays.toString(char[])
。如果您需要abcdef
,可以使用new String(char[])
。
答案 2 :(得分:2)
只需使用以下命令即可打印abcdef数组
String a= new String(Array);
System.out.println(a);
你有问题解决了!! 现在关于为什么打印其他东西,我认为上面的那些人为此提供了一些有用的链接。 好的,快去!
答案 3 :(得分:1)
因为char数组是一个基元数组,而toString()会给你它的默认值(这是对象的哈希值)。有些类会实现toString()来做更酷的事情,但是初始化不会。
答案 4 :(得分:1)
数组不会覆盖toString
。有一种静态方法:java.util.Arrays.toString
可以解决您的问题。
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));
}
}
答案 5 :(得分:0)
char []类的toString方法的默认实现返回数组基址的String表示形式,这是在此处打印的内容。我们无法改变它,因为char []类不可扩展。
答案 6 :(得分:0)
char[] Array = { 'a', 'b', 'c', 'd', 'e', 'f' };
System.out.println(Array);
应打印abcdef
。
答案 7 :(得分:0)
我猜是“ Array.toString()”到“ Arrays.toString(Array)”的拼写错误,而不是写name.toString(),而是将名称作为参数传递,并如上所述进行写操作。
答案 8 :(得分:-3)
这种方式我找到了工作:
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;
}