arrays.tostring()适用于一维数组,输出格式化字符串;多维数组必须用arrays.deeptostring()递归展开,否则显示哈希值;两者均支持null且不抛异常,需import java.util.arrays。

用 Arrays.toString() 打印一维数组非常方便,但直接对多维数组调用它,只会显示“地址式”的乱码(比如 [[I@1b6d3586)。这是因为多维数组本质上是“数组的数组”,而 toString() 默认只处理最外层引用。真正想看清内容,得用 Arrays.deepToString()。
一维数组:用 Arrays.toString() 就够了
它会把元素自动转成字符串,用方括号和逗号格式化输出,可读性强。
- 基本类型数组(如
int[]、double[])直接传入即可 - 对象数组(如
String[]、Person[])也适用,前提是元素本身重写了toString() - 注意别漏掉
import java.util.Arrays;
示例:
int[] arr = {1, 2, 3};System.out.println(Arrays.toString(arr));
// 输出:[1, 2, 3]
二维数组:必须用 Arrays.deepToString()
deepToString() 会递归遍历每一层,把嵌套的数组也展开成可读格式,否则你看到的只是内层数组的哈希值。
- 适用于所有维度的数组:二维、三维甚至更高维都支持
- 对
int[][]、String[][]、混合类型(如Object[][])同样有效 - 如果某一层是
null,它会如实显示为null,不会报错
示例:
int[][] matrix = {{1, 2}, {3, 4, 5}};System.out.println(Arrays.deepToString(matrix));
// 输出:[[1, 2], [3, 4, 5]]
常见误区与避坑提醒
- 误把二维数组当一维传给
toString()→ 输出类似[[I@xxx,不是 bug,是预期行为 - 忘记 import → 编译失败,IDE 通常会提示,但命令行容易卡住
- 用在未初始化的数组(
null)上 → 两种方法都会输出null字符串,不会空指针异常 - 自定义类数组未重写
toString()→ 外层能展开,但每个对象仍显示地址,需在类中补充实现
替代方案:简单循环也能搞定,但不推荐初学者硬记
虽然用 for 或增强 for 遍历 + 拼接也能打印,但容易出边界错误、格式难统一,还可能漏掉 null 判断。对初学者来说,记住两个方法名更省心:
一维 → toString(),多维 → deepToString()。










