java中直接打印数组输出哈希值,因数组未重写tostring()方法,默认调用object.tostring();应使用arrays.tostring()处理一维数组,多维数组需用arrays.deeptostring()。

Java中直接打印数组会输出类似[Ljava.lang.String;@1b6d3586这样的哈希值,无法查看实际内容。用Arrays.toString()是最简单、最常用的解决方法。
为什么不能直接System.out.println(arr)?
因为数组是对象,但没重写toString()方法,所以默认调用父类Object.toString(),返回的是类名+内存地址。即使数组里存的是字符串或数字,也看不到具体内容。
Arrays.toString()的基本用法
它适用于一维数组(包括基本类型和引用类型),返回格式化的字符串,元素用逗号分隔,整体用方括号包裹。
- 对
String[]:Arrays.toString(new String[]{"a", "b", "c"})→[a, b, c] - 对
int[]:Arrays.toString(new int[]{1, 2, 3})→[1, 2, 3] - 对空数组:
Arrays.toString(new String[]{})→[]
多维数组怎么办?
Arrays.toString()只处理一维。二维及以上要用Arrays.deepToString(),否则会看到类似[[Ljava.lang.String;@xxx, [Ljava.lang.String;@xxx]的输出。
- 正确:
Arrays.deepToString(new String[][]{{"x"}, {"y", "z"}})→[[x], [y, z]] - 错误(只用toString):结果不可读,不反映嵌套结构
调试时的小技巧
在IDE中设置断点后,可以直接在“Variables”窗口里展开数组,但代码里加日志更可靠。建议养成习惯:
- 打印前先判空,避免
NullPointerException:if (arr != null) System.out.println(Arrays.toString(arr)); - 配合变量名一起输出,便于定位:
System.out.println("users = " + Arrays.toString(users)); - 日志量大时,可用
Arrays.toString(Arrays.copyOf(arr, 5))截取前5个元素,避免刷屏
不复杂但容易忽略——一行Arrays.toString()就能让调试效率翻倍。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











