如果java是按值传递的,那么为什么显示数组名称会返回乱码?

sau*_*ook 0 java arrays pass-by-reference

我很困惑为什么我不能使用该语句来显示数组中的值?

System.out.println(intarray);

这是输出“[I@7852e922”

如果 java 是按值传递的,那么该语句不应该返回数组的值而不是对象引用。这是我使用的修复方法。

System.out.println(Arrays.toString(intarray));
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 6

这与 Java 按值传递无关。

System.out.println(intarray)使用该toString()方法来获取String所传递对象的表示。

Object的默认实现toString会打印您所说的“乱码”(由表达式生成getClass().getName() + "@" + Integer.toHexString(hashCode()))。数组类不会覆盖该实现。因此,System.out.println(intarray)打印出“乱码”。

另一方面,Arrays.toString(intarray)返回 a String,其中列出了传递的数组的元素。