应使用 arrays.tostring() 而非 array.tostring(),因后者仅返回无意义哈希码;arrays.tostring() 清晰展示一维数组内容且对 null 安全,多维数组需用 arrays.deeptostring()。

直接用 Arrays.toString() 打印数组,比手动遍历更简洁、安全,也更适合日志场景。
为什么不用 array.toString()
Java 中原始类型数组(如 int[])和对象数组(如 String[])默认继承自 Object,调用 toString() 只会输出类似 [I@1a2b3c4d 或 [Ljava.lang.String;@5e6a7a8b 这样的无意义哈希码,完全无法识别内容。日志里看到这种输出,基本等于没打。
Arrays.toString() 的正确用法
它专为数组设计,能清晰展示元素内容,支持所有一维数组类型:
-
int[] arr = {1, 2, 3}; logger.info("arr: {}", Arrays.toString(arr));→ 输出arr: [1, 2, 3] -
String[] names = {"Alice", "Bob"}; logger.debug("names: {}", Arrays.toString(names));→ 输出names: [Alice, Bob] - 对
null数组会返回"null",不会抛空指针异常,适合防御性日志
多维数组怎么办?
Arrays.toString() 只处理一维。二维及以上需用 Arrays.deepToString():
int[][] matrix = {{1, 2}, {3, 4}};-
logger.info("matrix: {}", Arrays.deepToString(matrix));→ 输出matrix: [[1, 2], [3, 4]] - 它递归调用每个子数组的
toString(),确保嵌套结构可读
日志中实用小技巧
避免过度打印影响性能或泄露敏感数据:
- 生产环境慎用
Arrays.toString(bigArray),尤其数组长度很大时——考虑截断或只打前 N 个元素 - 敏感字段(如密码、token)不要直接打印,即使用了
Arrays.toString()也需脱敏 - 搭配 SLF4J 占位符使用更高效:
logger.debug("ids: {}", Arrays.toString(ids));,避免字符串拼接开销
不复杂但容易忽略:一行调用,就能让日志从“看不懂”变成“一眼明了”。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











