每當我嘗試打印字符數組到控制檯,我得到的結果是整數格式,但每當我嘗試將整數數組打印到控制檯,我得到的結果哈希碼格式。任何人都可以告訴我爲什麼?在Java中的打印方法混亂
char[] arr={'4','5','6'};
System.out.println(arr); //456
int[] arr={4,5,6};
System.out.println(arr) //[[email protected]]
每當我嘗試打印字符數組到控制檯,我得到的結果是整數格式,但每當我嘗試將整數數組打印到控制檯,我得到的結果哈希碼格式。任何人都可以告訴我爲什麼?在Java中的打印方法混亂
char[] arr={'4','5','6'};
System.out.println(arr); //456
int[] arr={4,5,6};
System.out.println(arr) //[[email protected]]
java.io.PrintStream
(類的System.out
)具有特殊print
-method for char[]
,而不是int[]
。因此,對於char[]
,使用此特殊方法,而int[]
通過通用版本打印,該通用版本打印哈希碼(或更確切地說,以對象作爲參數調用String.valueOf()
的結果)。
我認爲第一個被視爲CharSequence ...就像一個字符串。
在第一種情況下,字符數組就像字符串一樣使用(實際上它也只是一個字符數組)。
在第二個對整數數組類型沒有重載,只是打印出對象引用。
僅僅因爲沒有特別處理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]