用arrays.tostring()打印一维数组,用arrays.deeptostring()打印多维数组,自定义格式则需手写嵌套循环。

直接用 System.out.println(arr) 打印多维数组,只会看到类似 [[I@1b6d3586, [I@4554617c] 这样的哈希值,根本看不到数据。真正优雅的打印,核心就一条:用对方法,不折腾。
一维数组:Arrays.toString() 是标准答案
它专为一维设计,自动加方括号、逗号分隔,输出直观:
-
int[] nums = {1, 2, 3};→Arrays.toString(nums)输出[1, 2, 3] -
String[] names = {"A", "B"};→ 同样输出[A, B] - 注意:
Arrays.asList()对基本类型数组(如int[])无效,会把它当单个对象处理
多维数组:必须用 Arrays.deepToString()
Arrays.toString() 遇到二维及以上就失效——它只展开一层,内层仍显示对象地址。而 deepToString() 会递归钻进每一层:
-
int[][] mat = {{1,2}, {3,4}};→Arrays.deepToString(mat)输出[[1, 2], [3, 4]] -
String[][] grid = {{"x","y"}, {"m","n"}};→ 输出[[x, y], [m, n]] - 三维、四维也一样支持,无需额外适配
需要自定义格式?手写遍历更灵活
如果想换行、缩进、加前缀或过滤某些值,deepToString() 就不够用了。这时嵌套循环最直接:
- 二维数组逐行打印:
for (int[] row : arr) { System.out.println(Arrays.toString(row)); } - 控制对齐或分隔符:
for (int i = 0; i - 避免常见陷阱:别在外层
for-each里再对整个数组做内层循环,容易逻辑错乱
安全与性能提醒
两个细节常被忽略,但影响稳定性:
- 传
null给deepToString()会抛NullPointerException,建议先判空:if (arr != null) System.out.println(Arrays.deepToString(arr)); - 性能完全不必担心,内部用
StringBuilder和轻量递归,千级元素以内无感 - 真要 JSON 风格或带缩进的输出,可引入 Jackson 或 Gson,但日常调试,
deepToString()已足够清晰
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











