Java中char[]打印数组名输出不是内存地址的原因详解
1.基本数据类型
①Java中共有八种基本数据类型:byte,int,short,long,float,double,char,boolean。
举例
直接输出对应数值
2.引用数据类型
①举例
在堆内存中开辟一块内存空间,把空间的地址返回给当前对象,所以打印出地址值。
可查看当前println方法底层源码
以object类型传入,调用的是object的tostring
②同理,数组也是引用数据类型,让我们挨个输出测试
所有数组中,只有char[] 打印出具体数值,它是不是违背了地址传递?
我们查看println打印char[]时底层源码
char[]以数组形式传递,和其他引用数据类型以object类型传递不同
这里会立即发送缓冲流输出。
所以char[]以数组形式传递进来,挨个输出具体的值,而其他引用数据类型和数组都以object类型传递进来,这样传递进来的是地址值,先调用obj.toString()方法转换成字符串,再输出地址值。
总结
char类型的数组就相当于一个字符串。
因为输出流System.out是PrintStream对象,PrintStream有多个重载的println方法,其中一个就是public void println(char[] x),直接打印字符数组的话。
int[]等其他数组需要以object类型传入,目的是调用obj的toString()方法转换成字符串。
char[]相当于一个字符串,不用再以object类型进入,跳过转换字符串这一步,它会直接打印,因而可以打印出数组内容,而不是地址。