java打印数组应使用arrays.tostring()处理一维数组,输出如[1, 2, 3];二维及以上用arrays.deeptostring()递归展开;null数组安全返回"null",但null子数组在deeptostring中需判空;自定义格式可通过字符串处理实现;敏感、超大或结构化需求场景应选用脱敏、截取或json序列化等替代方案。

Java 打印数组不能直接用 System.out.println(arr),否则只会输出类似 [I@1b6d3586 的地址码。真正想看内容,Arrays.toString() 是最轻量、最可靠的起点——它专为一维数组设计,一行代码就能生成可读格式,比如 [1, 2, 3] 或 [null, "a", "b"]。
一维数组:Arrays.toString() 一步到位
对 int[]、String[]、Character[] 等所有一维数组都适用,无需区分基本类型或引用类型。
- 自动调用每个元素的
toString()方法;null元素会原样显示为字面量null,不抛异常 - 输出带方括号和逗号分隔,如
[true, false, true]、['x', 'y', null] - 传入
null数组时返回字符串"null",安全可用 - 必须显式导入:
import java.util.Arrays;,否则编译报错
二维及以上数组:改用 Arrays.deepToString()
Arrays.toString() 遇到二维数组(如 int[][])会把每个子数组当作普通对象处理,只输出哈希地址,完全不可读。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 正确做法是调用
Arrays.deepToString(matrix),它会递归展开每一层,输出[[1, 2], [3, 4]]这类结构 - 支持任意维度,包括
String[][][]或混合类型嵌套 - 同样安全处理
null子数组,例如{{1}, null, {3}}输出为[[1], null, [3]] - 注意:若传入
null,会直接抛NullPointerException,建议先判空
自定义格式输出:轻量改造已有结果
如果默认的 [a, b, c] 格式不符合需求(比如要去掉空格、换分隔符、省略括号),可在 Arrays.toString() 结果上做简单字符串处理。
- 去掉首尾括号:
Arrays.toString(arr).substring(1, Arrays.toString(arr).length() - 1) - 替换分隔符:
Arrays.toString(arr).replace(", ", " | ")得到a | b | c - 紧凑无空格:
Arrays.toString(arr).replaceAll("[\[\], ]", "")→abc - 对基本类型数组,避免多次
Arrays.toString()调用,可封装成工具方法提升效率
替代方案:什么情况下不该用 Arrays.toString()
它适合快速调试,但不是万能方案。以下场景建议换方式:
- 数组含敏感数据(密码、token)——避免日志泄露,应脱敏或跳过打印
- 数组极大(十万级以上)——直接打印易卡顿、撑爆日志,可用
Arrays.copyOf(arr, 10)截取前几项 - 需要 JSON 或结构化输出——交给
ObjectMapper或Gson,别手动拼接 - 要控制对齐、宽度、补零等格式——用
printf或StringBuilder逐项构建
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










