一、前言
最近在复习javase知识,发现了一道看似简单却很坑人的面试题,整理成技术博客分享给大家,该博客是根据尚硅谷javase视频总结
二、题目
求下列代码的输出结果:
public class Test{
public static void main(String[] args){
int[] arr = new int[]{
1,2,3};
System.out.println(arr);
char[] arr1 = new char[]{
'a','b','c'};
System.out.println(arr1);
}
}
三、答案解析
结果为:
我们都明白,引用数据类型的变量存储结果不是地址值就是null。
我们输出arr得到的的确是一个地址值。那么为什么输出arr1就会遍历数组呢?
我们深入原码,分析一下原因:
我们通过分析原码可以发现,println方法其实是重载方法。我们输出int类型数组的变量名其实调用的是上图中的:
println(Object):void
然而,我们想要输出char类型数组变量名,其实调用的方法是上图中的:
println(char[]):void
这是两个重载方法,当我们输出char类型数组时,就会遍历数组。
这就是为何同样是引用数据类型变量,第一个输出语句输出的是地址值,第二个输出结果为数组的遍历