我认为toString方法会将一个char数组生成一个String,但我错了。
char[] k=new char[2];
k[0]='k';
k[1]='k';
System.out.println(k.toString());
此代码将输出:[C @ 112f614。
这段代码k.toString()究竟发生了什么?
我是不是应该在char数组中调用toString方法?
谢谢!
新年快乐!答案 0 :(得分:3)
你想使用Arrays.toString(char [] {'a','b'});
您可以使用
char data[] = {'a', 'b', 'c'};
String str = new String(data);
参见javadoc
public String(char [] value) 分配一个新的String以便它 表示当前包含的字符序列 字符数组参数。字符数组的内容是 复制;后续修改字符数组不会影响 新创建的字符串。参数:value - 的初始值 串
http://docs.oracle.com/javase/6/docs/api/java/lang/String.html
在数组上调用toString将从Object调用toString方法。这将返回hashCode
public String toString()返回的字符串表示形式 宾语。通常,toString方法返回一个字符串 “文字表示”这个对象。结果应该是简洁但是 信息表达,便于人们阅读。它是 建议所有子类都重写此方法。 toString 类Object的方法返回一个由名称组成的字符串 对象是实例的类,符号字符“@”, 和哈希码的无符号十六进制表示 宾语。换句话说,此方法返回一个等于的字符串 价值:
getClass()。getName()+'@'+ Integer.toHexString(hashCode())
返回:对象的字符串表示。
答案 1 :(得分:2)
因为数组是对象。所以调用toString()
结果来调用从对象类中删除的toString()
方法:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
在[C@112f614
中,[C
表示它是一个char数组。
如果要打印阵列的内容,请使用Arrays.toString(char[] a)
答案 2 :(得分:1)
这段代码k.toString()究竟发生了什么?我是不是应该在char数组中调用toString方法?
char数组的toString方法从Object继承默认的toString行为,它只是打印从对象在内存中的位置派生的唯一标识符。因此,除非你想要那个唯一标识符,否则调用k.toString()没有多大意义。 (k是你的char数组)
答案 3 :(得分:0)
你可能永远不会在任何类型的数组上调用toString。 Arrays类有许多用于创建数组的字符串表示的实用方法。
答案 4 :(得分:0)
对这个问题的部分答案:“这段代码k.toString()究竟发生了什么?”
toString()继承自java.lang.Object而未被覆盖。该实现只打印规范类名称加上@ -letter加上哈希码。就这些。因此,调用此方法对应用程序没有用,仅用于IDE中的调试目的,至少可以启发哪种类型的对象。
答案 5 :(得分:-3)
String可以将char数组作为构造函数。
String s = new String(k);