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
相关产品推荐
相关产品推荐

