必须用 deepToString(),因为 Arrays.toString() 仅处理一维数组,对多维数组的子数组仍调用 toString() 得到内存地址,而 deepToString() 递归遍历各层并安全处理 null。

Java 中打印多维数组不能直接用 toString(),否则只会输出类似 [[I@1b6d3586 的哈希值。要用 Arrays.deepToString() 才能正确展开并显示所有嵌套层级的元素。
为什么必须用 deepToString?
Arrays.toString() 只处理一维数组,对多维数组中的每个“元素”(其实是子数组引用)仍调用其 toString(),结果就是一堆内存地址。而 deepToString() 会递归遍历每一层,把嵌套的数组也转成可读字符串。
基本用法示例
适用于任意维度的数组,包括 int[][]、String[][][]、Object[][] 等:
- 二维数组:
System.out.println(Arrays.deepToString(new int[][]{{1,2},{3,4}}));→ 输出[[1, 2], [3, 4]] - 三维数组:
System.out.println(Arrays.deepToString(new int[][][]{ {{1},{2}}, {{3}} }));→ 输出[[[1], [2]], [[3]]] - 含 null 的数组:
Arrays.deepToString(new String[][]{null, {"a", "b"}})→ 输出[null, [a, b]],不会抛空指针异常
常见注意事项
该方法是静态工具方法,需导入 java.util.Arrays;它返回字符串,不修改原数组;对基本类型和引用类型数组都适用;但不支持自定义格式(如换行、缩进),如需美化输出得自行封装。
替代方案对比
如果只是调试,deepToString() 最快捷;若要日志中结构化展示,可考虑 Gson 或 Jackson 库序列化为 JSON;若需逐层控制格式,可用嵌套 for 循环 + StringBuilder 拼接,但代码量明显增加。


















