黑马程序员技术交流社区

标题: 为什么会有这样的输出结果??? [打印本页]

作者: 小菜凉碟    时间: 2013-5-3 10:56
标题: 为什么会有这样的输出结果???
本帖最后由 小菜凉碟 于 2013-5-3 23:35 编辑
  1. public class Test {
  2. public static void main(String[] args) {
  3. byte[] b = {1,2,3};
  4. char[] c = {'a','b','c'};
  5. char[] c1 = {'1','2','3'};
  6. int[] arr = {1,2,3};
  7. String[] str = {"1","2","3"};

  8. System.out.println(b);
  9. System.out.println(c);
  10. System.out.println(""+c);
  11. System.out.println(c1);
  12. System.out.println(""+c1);
  13. System.out.println(arr);
  14. System.out.println(str);
  15. }

  16. }
复制代码
对应的结果是:
[B@811c88
abc
[C@785d65
123
[C@3bc257
[I@153f67e
[Ljava.lang.String;@15bdc50
我的问题:为什么只有char[]输出的不是地址,但加上空字符串("")后又变成输出地址,疑惑中,请高手赐教;

作者: 付银攀    时间: 2013-5-3 11:57
本帖最后由 付银攀 于 2013-5-3 12:02 编辑


这是println能打印的类型
public void println(Object x)
    打印 Object,然后终止该行。此方法首先调用 String.valueOf(x) 获取打印对象的字符串值,然后的行为如同先调用 print(String) 再调用 println() 一样。
这是println(Object x)的解释,而String.valueOf(Object x)中接受Object x参数后调用的是Object类的toString()
Api上关于toString的解释是:
返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。 Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于: getClass().getName() + '@' + Integer.toHexString(hashCode())
所以,char[]类型的是可以直接打印内容,而加上空格后,就变成了String类型的引用了,println就按照println(Object x)去打印,这个时候就会调用到Object类的toString(),显示结果就是那样的了

作者: 黑马伍哲沂    时间: 2013-5-3 12:09
楼上已经说明了加空字符串后打印地址的问题。但我觉得看起来有点吃力。
原因很简单,char数组和String(Object)数组有不同的toString。(参考Api中Arrays类各个toString方法)
看图:

未命名.jpg (70.8 KB, 下载次数: 0)

未命名.jpg





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2