java打印数组应使用arrays.tostring()而非system.out.println(arr),前者输出清晰内容如[1, 2, 3],后者仅显示地址哈希值;二维及以上用arrays.deeptostring()递归展开;需显式导入java.util.arrays。

Java 中打印数组,别再用 System.out.println(arr)——它只输出类似 [I@1b6d3586 的地址哈希值。真正想看内容,一行 Arrays.toString() 就够了,清晰、安全、开箱即用。
一维数组:直接用 Arrays.toString()
这是最常用也最省心的方式,适用于所有基本类型(int[]、boolean[] 等)和引用类型(String[]、自定义对象数组):
- 自动包裹方括号
[],元素间用逗号加空格分隔,如[1, 2, 3]或[apple, banana] - 遇到
null元素会如实显示为字面量null,不抛异常 - 空数组返回
[],null数组返回字符串null(不是空指针异常) - 必须显式导入:
import java.util.Arrays;,不能在数组实例上调用
二维及以上数组:换用 Arrays.deepToString()
Arrays.toString() 不递归展开嵌套结构。对 int[][] 或 String[][] 直接调用,只会显示子数组的地址,比如 [[I@7a81197d, [I@5ca881c5]:
-
Arrays.deepToString(matrix)会逐层调用每个子数组的toString(),输出如[[1, 2], [3, 4]] - 支持任意维度,包括
Object[][][]这类复杂嵌套 - 同样安全处理
null子数组或null元素,不会崩溃
需要自定义格式?简单清洗或手动拼接
如果默认的 [a, b, c] 格式不满足需求(比如要去掉空格、换分隔符、不要括号),不必重写循环:
- 去掉首尾括号:
Arrays.toString(arr).substring(1, Arrays.toString(arr).length() - 1) - 替换分隔符:
Arrays.toString(arr).replace(", ", " | ")→a | b | c - 紧凑无空格:
Arrays.toString(arr).replace(", ", "").replace("[", "").replace("]", "") - 字符串数组更轻量:
String.join("-", arr)(仅限String[],无需额外处理)
调试实用小技巧
日常开发中加几行小优化,能显著提升日志可读性:
- 打印前先判空:
if (arr != null) System.out.println(Arrays.toString(arr)); - 带上变量名:
System.out.println("configKeys = " + Arrays.toString(keys)); - 大数组截取前 N 个:
Arrays.toString(Arrays.copyOf(arr, Math.min(10, arr.length))) - 配合 IDE 断点,在 Variables 视图里展开查看,代码日志作交叉验证
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











