" + x); 输出值是这样的:[I@1b67f74 所以十六进制数与分配对象的内存地址有-6ren">
gpt4 book ai didi

Java 引用值是地址值?

转载 作者:行者123 更新时间:2023-12-01 05:29:37 27 4
gpt4 key购买 nike

当我这样做时:

int x[] = new int[2];
System.out.println("...> " + x);

输出值是这样的:[I@1b67f74

所以十六进制数与分配对象的内存地址有关?

[我是什么意思?

最佳答案

不,那个十六进制数不应该被解释为对象所在的内存地址。其实就是对象的哈希码。 Object.toString() 的 API 文档说:

The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:

 getClass().getName() + '@' + Integer.toHexString(hashCode())

java.lang.Object.hashCode() 的 API 文档说:

As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.)

所以对于Sun的JVM来说,如果不重写hashCode()方法,那么它确实是对象的内存地址,但是并不能保证就是这样,所以你应该'依赖它。

在纯 Java 中没有(真正的、可靠的)方法(适用于任何 JVM)获取对象的内存地址; Java没有指针,引用不完全等同于指针。

Section 4.3.2 Java 虚拟机规范解释了 [I 的含义;在这种情况下,这意味着您的变量是一个 int 数组。

关于Java 引用值是地址值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1537480/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com