在Java开发过程中,我们经常需要打印数组内容来调试程序,对于一维数组来说,使用Arrays.toString就能得到正确的结果,但面对多维数组时,普通的方法往往无法满足需求,这时候就需要用到Arrays.deepToString方法。

Arrays.deepToString 基本介绍
Arrays.deepToString是java.util.Arrays类提供的静态方法,作用是将数组转换为字符串表示,支持任意维度的数组,包括多维数组、嵌套数组以及包含其他数组作为元素的数组。该方法会递归遍历数组中的所有元素,直到遇到非数组类型的元素,再将其转为字符串拼接起来。
与 Arrays.toString 的区别
很多开发者会混淆Arrays.toString和Arrays.deepToString的用法,两者的核心差异在于对多维数组的处理方式:
- Arrays.toString:只处理一维数组,当数组元素是数组类型时,会直接调用该元素的toString方法,通常输出的是数组的引用地址,无法展示内部内容。
- Arrays.deepToString:会递归处理数组的嵌套结构,无论数组有多少层维度,都能输出所有元素的实际值。
对比示例
以下代码展示了两种方法打印二维数组的不同结果:
import java.util.Arrays;
public class ArrayPrintDemo {
public static void main(String[] args) {
// 定义一个二维数组
int[][] twoDArray = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
// 使用Arrays.toString打印
System.out.println("Arrays.toString结果:");
System.out.println(Arrays.toString(twoDArray));
// 使用Arrays.deepToString打印
System.out.println("Arrays.deepToString结果:");
System.out.println(Arrays.deepToString(twoDArray));
}
}
上述代码的输出结果如下:
Arrays.toString结果: [[I@1b6d3586, [I@4554617c, [I@74a14482] Arrays.deepToString结果: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
可以看到,Arrays.toString输出的都是二维数组每个子数组的引用地址,而Arrays.deepToString正确输出了二维数组的所有元素内容。
Arrays.deepToString 正确用法
基本使用步骤
使用Arrays.deepToString打印多维数组的步骤非常简单:
- 导入java.util.Arrays类。
- 准备好需要打印的多维数组。
- 调用Arrays.deepToString方法,传入目标数组作为参数。
- 将返回的字符串输出即可。
不同维度数组的使用示例
三维数组打印示例
import java.util.Arrays;
public class ThreeDArrayDemo {
public static void main(String[] args) {
// 定义三维数组
int[][][] threeDArray = {
{{1, 2}, {3, 4}},
{{5, 6}, {7, 8}}
};
// 使用deepToString打印
String result = Arrays.deepToString(threeDArray);
System.out.println(result);
}
}
上述代码会输出[[[1, 2], [3, 4]], [[5, 6], [7, 8]]],完整展示了三维数组的所有元素。
包含对象数组的嵌套数组示例
Arrays.deepToString也支持包含对象类型的数组,只要对象正确实现了toString方法,就能输出对象的内容:
import java.util.Arrays;
class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{name='" + name + "', age=" + age + "}";
}
}
public class ObjectArrayDemo {
public static void main(String[] args) {
Student[][] studentArray = {
{new Student("张三", 20), new Student("李四", 21)},
{new Student("王五", 22)}
};
System.out.println(Arrays.deepToString(studentArray));
}
}
输出结果为[[Student{name='张三', age=20}, Student{name='李四', age=21}], [Student{name='王五', age=22}]],正确展示了嵌套对象数组的内容。
使用注意事项
- Arrays.deepToString的参数如果是null,会直接返回字符串"null",不会抛出空指针异常。
- 如果数组中存在循环引用,即数组的某个元素间接引用了数组本身,调用该方法会导致无限递归,最终抛出栈溢出错误,使用时需要避免这种情况。
- 对于基本类型的一维数组,使用Arrays.toString和Arrays.deepToString的结果是一样的,因为不存在嵌套结构,此时用哪个方法都可以。
- 该方法返回的是数组的字符串表示,不会修改原数组的任何内容,属于安全操作。
总结
Arrays.deepToString是Java中打印多维数组的正确工具,解决了普通打印方法和Arrays.toString无法处理嵌套数组的问题。开发者在使用时只需要记住,只要涉及多维数组或者嵌套数组的打印,优先选择Arrays.deepToString即可,同时注意避免数组循环引用的情况,就能正确输出数组的完整内容,提升调试效率。
JavaArrays.deepToString多维数组数组打印修改时间:2026-07-01 23:21:33