Arrays.deepToString()专为嵌套数组设计,支持所有原始类型多维数组、对象数组及混合嵌套Object[];一维数组效果等同toString();需防null、自循环引用、未重写toString()及漏import;适用调试,不适用对象字段展开、高频日志或JSON输出。

直接用 Arrays.deepToString() 就能清晰打印任意维度的数组内容,不用写循环、不担心哈希值乱码,是调试多维结构最省心的方式。
哪些数组适合用 deepToString
它专为“含嵌套数组”的场景设计,覆盖范围很广:
- 所有原始类型多维数组:如
int[][]、double[][][] - 对象数组:如
String[][]、Integer[][] - 混合嵌套的
Object[]:比如里面同时放了int[]、List<String>和普通字符串 - 一维数组也能用,效果等同于
Arrays.toString()
怎么避免常见报错
几个高频出错点,提前绕开更高效:
- 传入
null会直接抛NullPointerException,建议先判空:arr == null ? "null" : Arrays.deepToString(arr) - 数组内部存在自循环引用(比如
arr[0] = arr),会导致栈溢出,调试时注意检查数据构造逻辑 - 自定义类对象未重写
toString(),该对象仍显示ClassName@hash——deepToString 不负责穿透对象字段,只处理“数组类型”本身 - 忘记
import java.util.Arrays,编译失败,IDE 通常会标红提示
让输出更实用的小技巧
一行调用之外,加点小调整,日志更易读:
立即学习“Java免费学习笔记(深入)”;
- 带上下文标签打印:
System.out.println("请求参数 matrix: " + Arrays.deepToString(matrix)); - 大数组防刷屏:先截取前 5 行再打印,例如
Arrays.deepToString(Arrays.copyOf(matrix, Math.min(5, matrix.length))) - 和
deepEquals()配合做断言验证,比字符串比对更可靠 - 若需缩进/换行/高亮,不要硬改 deepToString,改用 Gson.toJson() 或 IDE 变量视图更合适
什么时候不该用它
它不是万能格式化工具,注意适用边界:
- 要查看对象内部字段(比如
Person类里的int[] scores),deepToString 不会自动展开——必须在Person.toString()里手动调用Arrays.toString(scores) - 高频日志场景(如每毫秒打一次),递归遍历有轻微性能开销,可考虑缓存或降级为简单标识
- 需要 JSON 格式、带字段名、支持浏览器预览时,用
new Gson().toJson(arr)更合适


















