2010-02-16 61 views
4

每当我尝试打印字符数组到控制台,我得到的结果是整数格式,但每当我尝试将整数数组打印到控制台,我得到的结果哈希码格式。任何人都可以告诉我为什么?在Java中的打印方法混乱

char[] arr={'4','5','6'}; 
System.out.println(arr); //456 

int[] arr={4,5,6}; 
System.out.println(arr) //[[email protected]] 

回答

11

java.io.PrintStream(类的System.out)具有特殊print-method for char[],而不是int[]。因此,对于char[],使用此特殊方法,而int[]通过通用版本打印,该通用版本打印哈希码(或更确切地说,以对象作为参数调用String.valueOf()的结果)。

0

我认为第一个被视为CharSequence ...就像一个字符串。

1

在第一种情况下,字符数组就像字符串一样使用(实际上它也只是一个字符数组)。

在第二个对整数数组类型没有重载,只是打印出对象引用。

3

仅仅因为没有特别处理int[]的方法。它将由String#valueOf()打印,而不是隐含地称为Object#toString()。如果Object#toString()在给定的对象类型中未被覆盖,则会打印以下内容(根据上述API)。

getClass().getName() + '@' + Integer.toHexString(hashCode()) 

int[]类有[I的名称。

达到你想要什么,你需要Arrays#toString()代替:

int[] arr = {4, 5, 6}; 
System.out.println(Arrays.toString(arr)); // [4, 5, 6]