我很困惑为什么我不能使用该语句来显示数组中的值?
System.out.println(intarray);
这是输出“[I@7852e922”
如果java是按值传递的,那么该语句不应该返回数组的值而不是对象引用。这是我使用的修复方法。
System.out.println(Arrays.toString(intarray));
这与 Java 按值传递无关。
System.out.println(intarray)
使用 toString()
方法来获取传递对象的 String
表示。
Object
的toString
的默认实现会打印您所说的“乱码”(由表达式getClass().getName() + "@" + Integer.toHexString(hashCode())
生成)。数组类不会覆盖该实现。因此,System.out.println(intarray)
打印出“乱码”。
另一方面,
Arrays.toString(intarray)
返回一个String
,列出传递数组的元素。
当你这样做时
System.out.println(myObj);
通过调用
myObj
,将对象 String
转换为可打印格式(即 myObj.toString()
)。
如果一个对象没有提供自己的
toString()
实现,它会从toString()
继承Object
,它返回对象的类名与对象的哈希码连接,如下(javadoc):
getClass().getName() + '@' + Integer.toHexString(hashCode())
数组从
toString()
继承 Object
,这就是为什么你会得到输出 [I@7852e922
。请注意,类名实际上是 [I
,它表示“包含基本类型 int 的数组”——您可以在here阅读有关类名的更多信息。
Java传递的是引用的值
intarray
,也就是说传递的是数组的地址。
它打印的内容与是否按值传递参数无关,它取决于 print 方法的作用。
这里Java是否按值传递并不重要。它打印哈希码的原因是因为数组是 Java 中的对象。
当您尝试使用
System.out.println()
在 Java 中打印对象时,将显示该对象的字符串表示形式。也就是说,Array(继承自Object类)的toString()
方法将被隐式调用,从而给你所谓的“乱码”。