arrays.deeptostring()专用于多维数组及含数组的对象,如int[][]、object[]含数组、list需转数组后调用;不可用于arraylist等非数组对象,遇null显示null,不支持循环引用。

用 Arrays.deepToString() 调试嵌套数组或含数组的对象时,它能递归展开每一层,比 toString() 更直观地暴露结构问题。
适用于哪些数据结构
该方法专为多维数组和含数组的集合设计,比如:
- 二维及以上原始类型数组(
int[][]、String[][][]) - 对象数组中包含其他数组(
Object[]里有int[]或String[][]) - 泛型集合中存了数组(如
List<int></int>,需先转成数组再调用)
常见误用与正确写法
直接对非数组对象(如 ArrayList、自定义类)调用会触发 NullPointerException 或返回无意义结果。必须确保入参是数组类型。
正确示例:
int[][] matrix = {{1, 2}, {3, 4, 5}};
System.out.println(Arrays.deepToString(matrix));
// 输出:[[1, 2], [3, 4, 5]]
错误示例:
List<int> list = Arrays.asList(new int[]{1}, new int[]{2, 3});
// ❌ 不要这样用:Arrays.deepToString(list) —— list 不是数组
// ✅ 正确做法:Arrays.deepToString(list.toArray())</int>
配合调试的实际技巧
在 IDE 断点处,把表达式粘贴进“Evaluate Expression”窗口,输入 Arrays.deepToString(yourArray) 即可即时查看;也可在日志中输出带标签的结构:
log.debug("Input grid: {}", Arrays.deepToString(grid));
log.debug("Expected shape: {}x{}", grid.length, grid[0].length);
若遇到 null 元素,deepToString 会显示 null,便于定位空指针源头。例如:
Object[] mixed = {"a", new int[]{1, 2}, null};
System.out.println(Arrays.deepToString(mixed));
// 输出:[a, [1, 2], null]
替代方案与局限提醒
对非数组对象(如含数组的 Bean),deepToString 无效,此时建议用 Jackson 的 ObjectMapper.writeValueAsString() 或 Lombok 的 @ToString(includeFieldNames=true)。另外,它不处理循环引用,遇到自引用数组会抛 StackOverflowError。











