我有
char c1 = 'S'; // S as a character
char c2 = '\u0068'; // h in Unicode
char c3 = 0x0065; // e in hexadecimal
char c4 = 0154; // l in octal
char c5 = (char) 131170; // b, casted (131170-131072=121)
char c6 = (char) 131193; // y, casted (131193-131072=121)
char c7 = '\''; // ' apostrophe special character
char c8 = 's'; // s as a character
char[] autoDesignerArray = {c1, c2, c3, c4, c5, c6, c7, c8};
和
System.out.println(autoDesignerArray + "Mustang");
输出:[C @ c17164Mustang
System.out.println(autoDesignerArray);
输出:谢尔比的
当我将char数组与字符串连接起来时,我不明白为什么会得到奇怪的输出。什么是“[C @ c17164”?记忆中的位置?当我用字符串连接时,为什么我会得到它,但是当我单独打印它时,我会得到我期望的结果?
答案 0 :(得分:7)
表达式System.out.println(X + Y)
等于表达式
System.out.println(X.toString() + Y.toString())
。
当您致电System.out.println(autoDesignerArray + "Mustang")
autoDesignerArray.toString()
("[C@c17164"
)与"Mustang"
连接并打印结果时。
答案 1 :(得分:2)
由于每个数组都有一个类,你得到的字符串是它的对象的对象表示,即[C@c17164Mustang
其中
[C
是一个类名([
代表1d数组)@
汇总字符串c17164
一些哈希码Mustang
你的字符串检查数组的类名称System.out.println(yourArray.getClass().getName());
对于ex,如果你System.out.println(new Object());
,你会得到像java.lang.Object@25154f
这样的对象的字符串表示形式。
并打印数组的实际值do System.out.println((java.util.Arrays.toString(autoDesignerArray)));
,它给出了
[S, h, e, l, b, y, ', s]
答案 2 :(得分:0)
java中的数组没有覆盖toString()
方法,这意味着:
System.out.println(autoDesignerArray + "Mustang");
toString()
并将其与字符串toString()
的默认实现将打印二进制名称后跟hashCode()
(char数组将打印[C后跟它的哈希码)System.out.println(autoDesignerArray);
toString()
数组的类似功能答案 3 :(得分:0)
这与数组有关,以及为什么他们不会隐式继承Object
- 为了获取更多信息,请随时查看SO question(在那里有答案)。< / p>
println(char[] s)
确实让我对Oracle Doc感到困惑 - 在C中,您通常会遍历数组中的每个元素,而print
每个元素后跟一个\n
来打破这条线。
然而,这一切的要点是autoDesignerArray.toString()
确实按照您的意愿行事(这就是为什么它会返回[C@c17164
)。