直接打印数组引用会显示内存地址如[i@1b6d3586,应使用arrays.tostring()展示内容;对二维及以上数组须用arrays.deeptostring();null安全且支持基本类型、string及含null的对象数组。

调试时看到 [I@1b6d3586 这类输出,说明你正直接打印数组引用——它不展示内容,只暴露内存地址。真正让数组“可读”的关键,是一行 Arrays.toString()。
什么时候必须用 Arrays.toString()
只要目标是“让人看清数组里有什么”,就该用它:
- 日志中记录参数或返回值,比如
log.debug("收到用户ID: {}", Arrays.toString(ids)) - 断点处通过 Evaluate Expression 查看变量内容
- 控制台临时输出验证逻辑,如
System.out.println("当前缓存: " + Arrays.toString(cache)) - 单元测试失败时快速比对实际值,避免肉眼数错
一维数组:安全、简洁、开箱即用
它原生支持所有基本类型数组(int[]、boolean[]等)和 String[],也兼容含 null 元素的对象数组:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
Arrays.toString(new int[]{1, 2, 3})→[1, 2, 3] -
Arrays.toString(new String[]{"a", null, "c"})→[a, null, c] -
Arrays.toString(null)→null(不抛异常)
注意:别写 "" + arr 或 String.valueOf(arr),它们返回的仍是地址字符串,毫无调试价值。
二维及以上数组:别硬套,换 deepToString
Arrays.toString() 对 int[][] 这类结构完全无效——它把每个子数组当普通对象处理,结果是 [[I@abc, [I@def]。这时必须升级:
- 用
Arrays.deepToString(matrix),输出[[1, 2], [3, 4]] - 若数组可能为
null,先判空:arr == null ? "null" : Arrays.deepToString(arr) - 混合嵌套也适用,例如
Object[] mixed = {"x", new int[]{1, 2}, new String[]{"y"}}→[x, [1, 2], [y]]
调试现场提效小技巧
不用反复手敲,也能让数组内容“常驻视野”:
- 在 IDE 的 Watches 面板中添加表达式
Arrays.toString(data),变量一变,结果实时刷新 - 大数组防卡顿:配合
Arrays.copyOf(arr, 10)只看前 10 项 - 条件断点里加判断,比如
data != null && data.length > 0,再用 Evaluate 查细节 - 自定义调试方法,例如只显示非零元素:
IntStream.of(arr).filter(x -> x != 0).mapToObj(String::valueOf).collect(joining(", ", "[", "]"))
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










