一道看似简单,却套路满满的Java基础面试题

一、前言

最近在复习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类型数组时,就会遍历数组。
这就是为何同样是引用数据类型变量,第一个输出语句输出的是地址值,第二个输出结果为数组的遍历

猜你喜欢

转载自blog.csdn.net/weixin_46594796/article/details/109689014