javaSystem.out.println()输出byte[]、char[]异常的问题详析
前言
今天突然有人问我他写的byte[]和char[],在用System.out.println()输出的时候所得的值有问题?
细思恐惧啊我之前怎么没发现。。。。。。。。。。。。。。。。
废话不多说代码如下
/** *@Author: *@Date:2019/1/9/00099:23 *@Version1.0 */ publicclassarrayTest{ publicstaticvoidmain(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数组所产生的不同,
输出byte数组输出的是内存地址
输出char数组输出的是数组的元素
原因是什么嘞·············????接着往下看。
查资料发现,System.out.println()是printStream类的成员方法,此方法只提供了以下几种数据类型的输出重载函数:
--------------------------------------------------------------------------------------------------------------------
println()void没有返回值通过写入分隔符字符串来终止当前行
println(booleanx)void没有返回值打印一个布尔值,然后终止该行
println(charx)void没有返回值打印一个字符,然后终止该行
println(char[]x)void没有返回值打印一个字符数组,然后终止该行
println(doublex)void没有返回值打印双精度浮点数,然后终止该行
println(floatx)void没有返回值打印单精度浮点数,然后终止该行
println(intx)void没有返回值打印一个整数,然后终止该行
println(longx)void没有返回值打印long整数,然后终止该行
println(Objectx)void没有返回值打印一个对象,然后终止该行
println(Stringx)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方法,并将其输出。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。