You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java是值传递,为何直接打印数组名输出对象引用而非数组值?

为什么直接打印Java数组会输出[I@7852e922而不是数组元素?

嘿,这个问题我刚学Java的时候也踩过一模一样的坑!咱们慢慢把它掰扯清楚:

核心原因:数组的toString()是默认实现

当你调用System.out.println(intarray)时,println()会自动调用传入对象的toString()方法。但Java里的数组虽然属于对象,却没有重写Object类的默认toString()——这个默认方法的逻辑就是返回 [类型标识@哈希码] 的格式:

  • [I 表示这是一个int类型的一维数组([代表数组,I是int的类型代码)
  • @后面的7852e922是数组对象哈希码的十六进制表示

所以你看到的输出其实是数组对象的默认字符串标识,不是数组里的元素内容。

关于“Java是值传递”的误区

你提到的Java值传递和这个问题其实没关系哦!当你把intarray传给println()时,确实是传递了数组引用的副本(这就是值传递的体现),但println()拿到这个引用后,还是会调用数组对象的toString()方法——而数组本身没重写这个方法,所以还是输出默认格式,和传递方式完全不搭边。

正确的打印方式

你现在用的System.out.println(Arrays.toString(intarray))绝对是正确解法!java.util.Arrays类专门提供了toString()方法,它会遍历数组里的每个元素,把它们拼接成像[1, 2, 3, 4]这样友好的字符串格式。

如果是多维数组的话,还可以用Arrays.deepToString()来打印所有层级的元素哦。

内容的提问来源于stack exchange,提问作者saulsebrook

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:04:56