该内容已被发布者删除 该内容被自由微信恢复
文章于 2021年9月5日 被检测为删除。
查看原文
被用户删除
其他

鸭哥面试了一妹纸,问她如何打印数组?她支支吾吾了半天。。。

鸭哥 鸭哥聊Java 2021-09-05

大家好,我是鸭哥。


最近,鸭哥帮部门招聘,做程序员的都知道,一个组里,妹纸真的太少了,刚刚HR小姐姐,为了照顾咱们这个“和尚组”,特地拿了一份妹纸的简历给我,让我好好去招聘,争取能招聘过来。


鸭哥跟部门的其它小伙伴商量了一下,考查妹纸的什么面试题呢?最后,达成一致,就问一个最简单,又最经典的面试题:如何打印数组?


然而,这位应聘实习岗位的妹纸,支支吾吾了半天,也没回答出来~


我只能给组里的小伙伴们说,我真的尽力了!


其实,打印数组,一个看似普通得不能再普通的操作,却也难倒了不少初级程序员。技术论坛上相关提问有着贼高的阅读量,看来大家对这个问题解决方法的第一感,还是有些问题的。不怕,鸭哥今天给你说明白,也希望这位妹纸也能好好听听~


直觉中的打印方法


要打印变量,我们很自然地想到如下的方法,

int[] intArray = {1, 2, 3};System.out.println(intArray); // 打印结果:[I@1b6d3586
String[] strArray = {"print","test"};System.out.println(strArray); // 打印结果:[Ljava.lang.String;@4554617c

为什么会打印出[I@1b6d3586这样的奇怪字符呢?因为在 Java 中,数组无法重写 toString() 方法,如果直接打印一个数组,得到的是 className + '@' + 数组的十六进制的 hashCode. 那么有哪些简单的方法可以正确地打印数组呢?



常用的几种方法


1、使用 for 循环


最”朴实无华“的方法,却也是屡试不爽的方法,直接打印变量名不成,逐个遍历打印一定是可以的!

int[] intArray = {1, 2, 3};for(int i = 0; i < intArray.length; i++) System.out.println(intArray[i]);

如果是多维数组的话,使用多层 for 循环嵌套就可以了。


2、使用 Arrays.toString() 或 Arrays.deepToString()


对于一维数组,我们可以使用 Arrays.toString() 方法,它支持将任意类型的数组转换为字符串,示例如下,

int[] intArray = {1, 2, 3};System.out.println(Arrays.toString(intArray)); // 打印结果:[1, 2, 3]

但对于多维数组,用 Arrays.toString() 打印就会出现和直接打印数组变量名时一样的问题,这时候,我们就需要使用 Arrays.deepToString() 方法了

String[][] strArray = {{"print1","test1"},{"print2","test2"}};
//打印结果:[[Ljava.lang.String;@1b6d3586, [Ljava.lang.String;@4554617c]System.out.println(Arrays.toString(strArray));
//打印结果:[[print1, test1], [print2, test2]]System.out.println(Arrays.deepToString(strArray));

一维数组用 Arrays.toString() 方法,多维数组用 Arrays.deepToString() 方法,两者在具体实现上的区别,大家可以去看 Java 的源码,还是非常好懂的,这也是学习优秀编码习惯和思路的快捷方法!


3、使用 Arrays.asList()


需要说明的是,Arrays.asList() 方法只针对 Object 数组有效,打印基本数据类型(如int)的数组是不行的,

int[] intArray = {1, 2, 3};System.out.println(Arrays.asList(intArray)); // 打印结果:[[I@1b6d3586]
Integer[] IntArray = new Integer[]{1, 2, 3};System.out.println(Arrays.asList(IntArray)); // 打印结果:[1, 2, 3]


综合来看,Java 中打印数组最简单和通用的方法是使用 Arrays 类中的 toString() 或 deepToString() 方法;而当我们需要定制输出内容的格式时,使用 for 循环遍历则是比较方便的。


这个问题,你get到了吗?你面试的时候,被问到过没?欢迎在留言区讨论~



近期技术热文

1、恐怖!又一群码农被抓了?

2、快速提升性能的SQL语句,建议收藏

3、老湿机们,又一款APP被曝光,竟然共享床位,公然搞“黄色”!!!

4、微软终于对JDK下手了


点个在看你最好看


: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存