提问人:saulsebrook 提问时间:5/8/2018 最后编辑:user3437460saulsebrook 更新时间:11/14/2023 访问量:571
如果 java 是按值传递的,那么为什么显示数组名称会返回乱码?[复制]
If java is pass-by-value, then why does displaying an array name return gibberish? [duplicate]
问:
我很困惑为什么我不能使用该语句来显示数组中的值?
System.out.println(intarray);
这是输出“[I@7852e922”
如果 java 是按值传递的,则该语句不应该返回数组的值,而不是对象引用。这是我正在使用的修复程序。
System.out.println(Arrays.toString(intarray));
答:
Java 传递了引用的值,这意味着它传递了数组的地址。intarray
它打印的内容与是否按值传递参数无关,这取决于打印方法的作用。
这与 Java 按值传递无关。
System.out.println(intarray)
使用该方法获取传递对象的表示形式。toString()
String
的默认实现 会打印您所说的“乱码”(由表达式 生成)。数组类不会重写该实现。因此,打印“胡言乱语”。Object
toString
getClass().getName() + "@" + Integer.toHexString(hashCode())
System.out.println(intarray)
另一方面,返回 a 列出传递的数组的元素。Arrays.toString(intarray)
String
在这里,Java 是否按值传递并不重要。它打印哈希码的原因是因为 Array 是 Java 中的一个对象。
当您尝试在 Java 中使用 打印 Object 时,将显示该 Object 的 String 表示形式。也就是说,Array 的方法(继承自 Object 类)将被隐式调用,从而为您提供所谓的“乱码”。System.out.println()
toString()
当你这样做时
System.out.println(myObj);
通过调用 将对象转换为可打印格式(即 a)。myObj
String
myObj.toString()
如果对象没有提供自己的实现,它将继承 from ,它返回与对象的哈希码连接的对象的类名,如下所示 (javadoc):toString()
toString()
Object
getClass().getName() + '@' + Integer.toHexString(hashCode())
数组继承自 ,这就是你得到输出的原因。请注意,类名实际上是 ,它表示“包含原始类型 int 的数组”——您可以在此处阅读有关类名的更多信息。toString()
Object
[I@7852e922
[I
评论
Array
toString()
toString()
java.lang.Object