Arrays.deepToString()能一键递归展开多维及混合嵌套数组,输出结构清晰的字符串(如[[1, 2], [3, 4]]),自动处理null、空值防护与格式化,避免手动遍历的易错性和不可读性。

用 Arrays.deepToString() 替代手动遍历打印嵌套数组,能一键生成可读性强、结构清晰的字符串表示,避免空指针异常和格式混乱。
自动处理多维数组和嵌套集合
普通 Arrays.toString() 遇到二维数组只会显示内存地址,而 deepToString() 会递归展开每一层:
- 对
int[][] arr = {{1, 2}, {3, 4}};,toString()输出类似[[I@1b6d3586, [I@4554617c];deepToString()直接输出[[1, 2], [3, 4]] - 支持含
null元素的数组,如{null, new int[]{5, 6}}→[null, [5, 6]] - 兼容嵌套的
List、Set等(需确保内部元素也支持toString())
省去边界检查和空值防护
手动拼接嵌套结构常要层层判空、加括号、逗号分隔,容易出错。而 deepToString() 内部已封装这些逻辑:
- 遇到
null数组直接输出null字符串,不抛NullPointerException - 自动为每层数组添加方括号,元素间用逗号+空格分隔,符合 Java 习惯写法
- 循环引用时会标记
...]避免无限递归(JDK 9+ 支持)
调试日志中快速定位数据结构
在 log 输出或单元测试断言中,直接使用可大幅提升可读性:
-
推荐写法:
log.debug("输入矩阵: {}", Arrays.deepToString(matrix)); - 对比
System.out.println(Arrays.toString(matrix))只能看到一串地址,无法确认实际内容 - 与
Objects.toString(obj, "N/A")结合,可统一处理可能为null的整个数组变量
注意适用范围和性能边界
它不是万能格式化工具,需留意场景限制:
- 仅适用于数组(包括基本类型和对象数组),对普通
List需先转成数组:Arrays.deepToString(list.toArray()) - 深层嵌套(如 10 层以上)或超大数组可能影响性能,生产环境大量日志慎用
- 若需自定义格式(如缩进、换行、字段名),应配合 Jackson 或 Gson 序列化,而非依赖此方法

















