Arrays.toString()是轻量高效的一维数组可视化工具,支持基本类型、String及含null元素的数组打印;多维数组需用deepToString()递归展开,且自定义对象须重写toString()。

用好 Arrays.toString(),能让调试从“猜”变成“看”——它不是万能打印工具,但用对场景、避开常见误区,就是最轻量高效的可视化手段。
一维数组调试:一行代码看清内容
对 int[]、String[]、boolean[] 等基本类型或 String 数组,直接调用即可获得可读格式:
-
输出带括号和逗号分隔:如
[1, 2, 3]或[apple, banana] - null 数组安全返回字符串 "null",不抛异常,适合日志中防御性打印
-
含 null 元素的对象数组也能显示:如
[User@123, null, User@456],保留结构信息
多维数组别硬套:deepToString 是刚需
Arrays.toString() 遇到 int[][] 或 String[][] 就会失效,只显示子数组的内存地址,比如 [[I@abc, [I@def]。这时必须换用:
-
Arrays.deepToString(matrix)—— 自动递归展开所有层级,输出[[1, 2], [3, 4]] - 注意:
deepToString参数类型是Object[],不能直接传int[];但int[][]是Object[]的子类型,可以正常接收 - 若数组元素是自定义对象,仍需确保该类重写了
toString(),否则深层内容还是不可读
日志与断点中的实用技巧
避免低效写法,提升调试响应速度:
立即学习“Java免费学习笔记(深入)”;
-
日志中推荐参数化写法:
log.debug("IDs: {}", Arrays.toString(ids)),避免提前拼接字符串浪费 GC -
大数组加长度判断:防止刷屏,例如
ids.length -
IDE 断点时手动执行表达式:在 IntelliJ 的 Evaluate Expression 中输入
Arrays.toString(myArray),实时查看,比反复修改 println 更快 - Watches 面板添加常用表达式,让关键数组持续可见,不用每次展开变量树
轻量定制输出格式
不需要复杂模板时,简单字符串处理就能满足多数调试需求:
- 去掉方括号:
Arrays.toString(arr).substring(1, Arrays.toString(arr).length() - 1) - 替换分隔符:
Arrays.toString(arr).replace(", ", " ")或.replace(", ", "|") - 紧凑无空格:
Arrays.toString(arr).replaceAll("[\[\], ]", "")(注意正则含义) - 高频使用建议封装成工具方法,避免重复计算和多次 replace


















