Java中打印多维数组应使用Arrays.deepToString(),它递归展开各层并生成可读字符串如[[A, B], [C, D]];普通toString()仅返回哈希码,Arrays.toString()对多维数组无效。

Java 中打印多维数组不能直接用 toString(),因为那只会输出哈希码。最简单、最常用的方式就是用 Arrays.deepToString() —— 它专为嵌套数组设计,能递归展开每一层,生成可读的字符串表示。
为什么 deepToString 是首选
普通 Arrays.toString() 只处理一维数组;遇到二维或更高维时,内部的子数组仍被当作 Object 打印,结果类似 [[Ljava.lang.String;@1b6d3586, [Ljava.lang.String;@2c7b84de],毫无可读性。deepToString 会逐层调用 toString,直到最内层基本类型或 String,最终返回形如 [[a, b], [c, d]] 的结构化字符串。
基础用法:二维数组示例
只需一行代码:
String[][] grid = {{"A", "B"}, {"C", "D"}};
System.out.println(Arrays.deepToString(grid)); // 输出: [[A, B], [C, D]]
支持所有维度和类型组合(int[][], Object[][], List<String>[] 等),自动适配。
立即学习“Java免费学习笔记(深入)”;
处理 null 元素与空数组
deepToString 对 null 值友好:数组中某项为 null,它会显示为 null 字面量,不会抛异常。
- 如果整个数组引用是
null,调用会抛NullPointerException,需提前判空 - 空数组(如
new int[0][0])会输出[],嵌套空数组则显示[[]] - 含 null 子数组:
new String[][]{{"X"}, null}→[[X], null]
替代方案:手动遍历(仅当需定制格式时)
若要加前缀、换行或对齐(比如打印矩阵时对齐列宽),deepToString 不够灵活,就得手写循环:
- 用嵌套 for 或增强 for 遍历,配合
Arrays.toString()处理每行 - 对齐建议用
String.format("%-5s", item)控制字段宽度 - 注意:手动实现不处理任意深度,三层以上容易出错,优先考虑封装工具方法
不复杂但容易忽略细节,日常调试用 deepToString 足够可靠。



















