今天 忽然有人問我他寫的byte[]和char[],在用System.out.println()輸出的時候所得的值有問題?java
細思恐懼啊 我以前怎麼沒發現。。。。。。。。。。。。。。。。數組
廢話很少說 代碼以下函數
/** * @Author: * @Date: 2019/1/9/00099:23 * @Version 1.0 */ public class arrayTest { public static void main(String[] args) { //建立一個byte數組 byte[] b = {'a'}; //建立一個char數組 char[] c = {'a'}; //用System.out.println輸出byte數組 System.out.println(b);//控制檯輸出 [B@7adf9f5f //用System.out.println輸出char數組 System.out.println(c);//控制檯輸出 a } }
由代碼能夠看出,使用System.out.println()byte數組和輸出char數組所產生的不一樣,spa
輸出byte數組 輸出的是內存地址code
輸出char數組 輸出的是數組的元素對象
緣由是什麼嘞·············????接着往下看。blog
查資料發現,System.out.println()是printStream類的成員方法,此方法只提供瞭如下幾種數據類型的輸出重載函數:內存
--------------------------------------------------------------------------------------------------------------------字符串
println() void 沒有返回值 經過寫入分隔符字符串來終止當前行io
println(boolean x) void 沒有返回值 打印一個布爾值,而後終止該行
println(char x) void 沒有返回值 打印一個字符,而後終止該行
println(char[] x) void 沒有返回值 打印一個字符數組,而後終止該行
println(double x) void 沒有返回值 打印雙精度浮點數,而後終止該行
println(float x) void 沒有返回值 打印單精度浮點數,而後終止該行
println(int x) void 沒有返回值 打印一個整數,而後終止該行
println(long x) void 沒有返回值 打印long整數,而後終止該行
println(Object x) void 沒有返回值 打印一個對象,而後終止該行
println(String x) void 沒有返回值 打印一個字符串,而後終止該行
-----------------------------------------------------------------------------------------------------------------------
由以上能夠看出 咱們在輸出boolean、char、char[]、double、float、int、long、String 類型的數據,
會輸出相應的值,對於Object的輸出,System.out.println()會先調用其toString方法,而後會將該對象的toString方法的返回值輸出,
因爲System.out.println()沒有對int[]、String[]、byte[]、Object[]、輸出函數重載,全部在使用該方法輸出這些數據類型時,該方法會將其中的參數
作數組首元素來對待,也就是說System.out.println(b);等價於System.out.println(b[0]);而後調用首元素的toString方法,並將其輸出。
---------------------------------- end ----------------------------------