Puzzle 12: ABC

对象的引用的和实体

char[] 不是 String.

以下两段代码执行以后, 是否输出相同的内容?

  • 第一段: Object numbers = new char[]{'1', '2', '3'}; System.out.println(numbers);
  • 第二段: System.out.println(new char[]{'1', '2', '3'});

输出结果分别是:

  • [C@de6ced
  • 123

居然不是一样的. 在具体打印时, 事实上调用了两个不同的方法:

原因可以这样简单地解释:

在Object numbers = new char[]{'1', '2', '3'};这句中,左边是右边的reference,右边就是具体的entity了,所以,左边打印出来是类名。

其他:

虽然字符型也属于整型,但通常不把它们当着数字来看待——对于println方法,当然想要输出字母而不是它对应的数字本身。char[]数组并非String, char[] 没有重写toString()方法。

  1. JLS 10.7 Array Members
  2. JLS 15.18.1.1 String Conversion
  3. Class.getName()