Java 打印数组,一个看似普通得不能再普通的操作,却也难倒了一批程序员。技术论坛上相关提问有着贼高的阅读量,看来大家对这个问题解决方法的第一感,还是有些问题的。不怕,今天我给你说明白~

直觉中的打印方法

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

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 循环遍历则是比较方便的。

今天的内容你有哪些心得体会,在留言区与大家分享吧~

标签: java, 打印数组, Java面试题, stackoverflow中文版