xde*_*000 2 java pointers reference memory-address
当我做:
int x[] = new int[2];
System.out.println("...> " + x);
Run Code Online (Sandbox Code Playgroud)
输出值如下: [I@1b67f74
以便十六进制数与已分配对象的内存地址有关?
并且[I这是什么意思?
Jes*_*per 10
不,该十六进制数不应被解释为对象所在的内存地址.实际上,它是对象的哈希码.API文档Object.toString()说:
类Object的toString方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符"@"和对象的哈希码的无符号十六进制表示组成.换句话说,此方法返回一个等于值的字符串:
Run Code Online (Sandbox Code Playgroud)getClass().getName() + '@' + Integer.toHexString(hashCode())
API文档java.lang.Object.hashCode()说:
尽可能合理,Object类定义的hashCode方法确实为不同的对象返回不同的整数.(这通常通过将对象的内部地址转换为整数来实现,但JavaTM编程语言不需要此实现技术.)
所以对于Sun的JVM,如果你没有覆盖该hashCode()方法,那么它确实是对象的内存地址,但不能保证这样,所以你不应该依赖它.
没有(真实的,可靠的)方式(适用于任何JVM)以获得纯Java中对象的内存地址; Java没有指针,引用与指针不完全相同.
Java虚拟机规范的4.3.2节解释了它的[I含义; 在这种情况下,它意味着您的变量是一个数组int.
| 归档时间: |
|
| 查看次数: |
1081 次 |
| 最近记录: |