arrays.tostring()打印数组元素字符串而非内存地址;直接打印数组对象会显示内存地址,需调用arrays.tostring(arr)并导入java.util.arrays,多维数组用deeptostring,自定义类需重写tostring,也可用string.join或stream自定义格式。

Arrays.toString() 本身不会打印内存地址,它打印的是数组元素的字符串表示。如果你看到类似 [Ljava.lang.String;@1b6d3586 这样的输出,说明你直接对数组对象调用了 toString()(比如用 System.out.println(arr)),而不是调用 Arrays.toString(arr)。
确认是否正确调用了 Arrays.toString()
常见错误是忘记 import 或写错调用方式:
- ❌ 错误:直接打印数组对象 —
System.out.println(arr); - ✅ 正确:显式调用工具方法 —
System.out.println(Arrays.toString(arr)); - 别忘了导入:
import java.util.Arrays;
注意数组类型和重载版本
Arrays.toString() 有多个重载方法,只支持一维基本类型数组和引用类型数组:
- 支持
int[]、String[]、Object[]等一维数组 - 不支持多维数组(如
int[][])——会退化为默认toString(),显示内存地址 - 多维数组请用
Arrays.deepToString(arr)
检查是否误用了自定义类数组且未重写 toString()
如果你的数组元素是自定义类(如 Person[]),而该类没重写 toString(),那么 Arrays.toString() 仍会显示每个元素的内存地址(如 Person@2a139a55):
- 解决办法:在
Person类中重写toString()方法 - 例如:
@Override public String toString() { return "Person{name='" + name + "'}"; }
替代方案:用增强 for 循环或 Stream 手动格式化
当需要更灵活的输出格式(比如不带方括号、自定义分隔符),可以不用 Arrays.toString():
- 用
String.join()(适用于String[]):String.join(", ", arr) - 用 Stream(Java 8+):
Arrays.stream(arr).map(Object::toString).collect(Collectors.joining(", ")) - 简单遍历:
for (int i = 0; i
不复杂但容易忽略 — 关键是分清“数组对象本身的 toString”和“Arrays 工具类提供的 toString 方法”。











