今天 忽然有人问我他写的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 ----------------------------------