我以为toString方法会为String生成一个char数组,但我错了。
char[] k=new char[2];
k[0]='k';
k[1]='k';
System.out.println(k.toString());
此代码将输出:[C@112f614。
这个代码k.toString()到底发生了什么?
我永远不应该在char数组中调用toString方法吗?
谢谢!
新年快乐!
您想要使用Arrays.toString(char[]{'a','b'});
您可以使用
char data[] = {'a', 'b', 'c'};
String str = new String(data);
请参阅javadoc
公共字符串(char[]值)分配一个新字符串,以便表示当前包含在字符数组参数。字符数组的内容如下复制;字符数组的后续修改不会影响新创建的字符串。参数:value-字符串
http://docs.oracle.com/javase/6/docs/api/java/lang/String.html
对数组调用toString将从Object调用toString方法。这将返回您的hashCode
public String to String()返回对象通常,toString方法返回一个字符串"文本表示"这个对象。结果应该是简洁但易于阅读的信息性表述。是的建议所有子类重写此方法。toStringObject类的方法返回一个字符串,该字符串由对象是其实例的类,at符号字符"@",以及对象换句话说,此方法返回一个等于的值:
getClass().getName()+'@'+Integer.toHexString(hashCode())
返回:对象的字符串表示。
因为数组是对象。因此,调用toString()
结果来调用从对象类继承的toString()
方法,即:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
在[C@112f614
中,[C
表示它是一个字符数组。
如果要打印数组的内容,请使用Arrays.toString(char[] a)
这个代码k.toString()到底发生了什么?我永远不应该在char数组中调用toString方法吗?
char数组的toString方法继承了Object的默认toString行为,即简单地打印从对象在内存中的位置派生的唯一标识符。所以,除非你想要那个唯一的标识符,否则调用k.toString()没有多大意义。(k是你的字符数组)
您可能永远不应该对任何类型的数组调用toString。Arrays类有许多用于创建数组的字符串表示的实用方法。
这个问题的部分答案是:"这个代码k.toString()到底发生了什么?">
toString()是从java.lang.Object继承的,没有被重写。实现只打印规范类名加上@字母加上散列代码。仅此而已。因此,调用此方法对应用程序没有用处,只是为了在IDE中进行调试,以便至少了解对象的类型。
字符串可以采用char数组作为构造函数。
String s = new String(k);