繁体   English   中英

Java println(charArray + String)vs println(charArray)

[英]Java println(charArray + String) vs println(charArray)

我有

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”? 记忆中的位置? 当我用字符串连接时,为什么我会得到它,但是当我单独打印它时,我会得到我期望的结果?

表达式System.out.println(X + Y)等于表达式System.out.println(X.toString() + Y.toString())

当您调用System.out.println(autoDesignerArray + "Mustang") autoDesignerArray.toString()"[C@c17164" )将与"Mustang"连接,并打印结果。

因为每个数组都有一个类,你得到的字符串是它的对象的对象表示,即[C@c17164Mustang where

  • [C是类名( [代表1d数组]
  • @汇总字符串
  • c17164一些哈希码
  • Mustang你的弦

检查数组的类名称是否为System.out.println(yourArray.getClass().getName());

例如,如果你做System.out.println(new Object()); 你会得到像java.lang.Object@25154f这样的对象的字符串表示形式。

并打印数组的实际值做System.out.println((java.util.Arrays.toString(autoDesignerArray))); 这使

[S, h, e, l, b, y, ', s]

演示

java中的数组没有覆盖toString()方法 ,这意味着:

  1. System.out.println(autoDesignerArray + "Mustang");
    • 将打印默认的toString()数组并将其与字符串连接
    • toString()的默认实现将打印二进制名称后跟hashCode() (char数组将打印[C后跟它的哈希码)
  2. System.out.println(autoDesignerArray);
    • 实际上将调用Arrays.toString()或类似的功能正确处理数组的toString()

这与数组有关,以及它们为什么不隐式继承Object这一事实 - 有关更多信息,请随时查看此SO问题 (在那里有答案)。

println(char[] s)确实让我在Oracle Doc - In C中迷惑了你通常会遍历数组中的每个元素并print每个元素后跟一个\\n来打破这一行。

然而,这一切的autoDesignerArray.toString()autoDesignerArray.toString()不会像你希望的那样真正起作用(这就是它返回[C@c17164 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM