Java 使用 System.out.print 输出数组
1 | int[] array = {5, 4, 3, 2, 1}; |
今天在执行这段代码的时候,输出竟然是
1 | [I@1b6d3586 |
之前用 Python 用习惯了,没意识到 Java 不能这样输出数组。
解决方案
可以使用 Arrays.toString()
方法。
1 | int[] array = {5, 4, 3, 2, 1}; |
或者使用 for 循环遍历数组的每一个元素输出。
剖析原因
以下来剖析一下深层次的原因。
来分析一下 System.out.print
。
java.lang.System 是一个类。我们先来看一下 System
类的源代码。
1 | public final class System extends Object { |
这里能看出,out
其实是 System
的一个静态成员变量,其类型是 PrintStream。而 print()
是 PrintStream
类的一个方法。
通过查看Java Docs我们可以看到有很多重载的 print()
方法。
可以看到,有很多重载的 print()
函数,但是没有专门支持 int[]
、long[]
、double[]
这种类型数组输出的 print()
方法。
因此,int[]
、long[]
、double[]
类型的数组对象会被当做 Object
对象来处理。
我们来看一下 print(Object obj)
1 | public void print(Object obj) { |
其实相当于对数组调用了 toString()
方法。而Java中数组的 toString()
方法只会返回“对象类型@对象地址”。
System.out
的初始化
1 | public final class System extends Object { |
当JVM启动的时候,JVM会通过 initializeSystemClass()
方法对 out
进行初始化。