当我做的:

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

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

,使得十六进制数是关于到其中对象已分配的内存地址?

[I这是什么意思?

有帮助吗?

解决方案

没有,即十六进制数不应该被解释为在对象所在的存储器地址。事实上,它是对象的哈希码。 Object.toString()的API文档说:

  

Object类的toString方法返回一个由其中的对象是一个实例,该符号字符`的类的名称的字符串@”,并且对象的哈希码的无符号的十六进制表示。换句话说,此方法返回一个字符串等于的值:

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

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

  

多达是合理可行,由Object类定义的hashCode方法并针对不同的对象返回不同的整数。的(这一般是通过将该对象的内部地址转换成一个整数来实现的,但不是由的JavaTM编程语言不需要这种实现技巧。)

因此,对于Sun的JVM,如果不重写hashCode()方法,那么它的确是对象的内存地址,但没有保证,这是如此,所以你不应该依赖于它。

有没有(为真实,可靠)的方式(即在任何JVM的作品),以获得在纯Java对象的内存地址; Java没有指针和引用不是完全一样的指针。

第4.3.2节解释[I的意思;在这种情况下这意味着你的变量是int的阵列。

其他提示

[I意味着它是一个整数阵列([)(I)。

[I代表的int数组的类名。 VM中的地址的数量,但由于的hashCode通常覆盖,这不是明智的做法是直接用它来识别的对象。 对于这一点,使用System.identityHashcode(对象x),它返回以可靠的方式相同的值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top