java打印数组应使用arrays.tostring()(一维)或arrays.deeptostring()(多维),避免直接打印地址;二者均安全处理null且支持基本类型,自定义格式可用stream或string.join。

Java中直接打印数组会输出类似[Ljava.lang.String;@1b6d3586这样的哈希值,毫无可读性。用Arrays.toString()是最简单、最标准的美化方式,专为一维数组设计,能清晰展示元素内容和结构。
一维数组:用Arrays.toString()一步到位
这是最常用也最推荐的做法。它把数组转成形如[a, b, c]的字符串,自动处理null、特殊字符和类型差异。
- 对基本类型数组(如
int[]、double[])同样适用,无需额外重载 - 遇到
null元素会显示为null,不会抛异常 - 示例:
int[] nums = {1, 2, 3}; System.out.println(Arrays.toString(nums));→ 输出[1, 2, 3]
二维及以上数组:用Arrays.deepToString()
Arrays.toString()对嵌套数组只显示内部数组的引用地址,真正需要展开每一层时,必须改用Arrays.deepToString()。
- 它递归调用每个子数组的
toString(),生成类似[[1, 2], [3, 4]]的格式 - 支持任意维度,包括
Object[][][]这类复杂嵌套 - 注意:仍不适用于自定义对象的深度格式化,仅限数组结构本身
自定义格式输出:手动拼接或使用Stream
如果需要更灵活的分隔符、前缀/后缀,或者想跳过某些元素,Arrays.toString()就不够用了。
- 用
String.join(", ", Arrays.asList(arr))适合引用类型数组(需确保非null) - 对基本类型,可用
IntStream.of(arr).mapToObj(String::valueOf).collect(Collectors.joining(", ")) - 想加方括号或换行?在拼接结果前后手动添加即可,比如
"[" + String.join(", ", ...) + "]"
常见误区提醒
别踩这些容易被忽略的坑:
- 误用
System.out.println(arr)——永远只打地址,不是内容 - 对二维数组错用
Arrays.toString()——看到[[I@xxx, [I@yyy]就该意识到要用deep版本 - 忘记导入
java.util.Arrays——编译直接报错,IDE常自动补全但手动写时容易漏
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











