2010-02-16 89 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]