Java引用变量地址

时间:2013-05-07 10:46:52

标签: java

在java中,如果我们考虑一个类A,我们通过编写

来创建它的对象
A aObj = new A();

其中aObj是引用变量。

  1. 打印此引用变量是否会打印它所引用的对象的地址?
  2. 与C的情况一样,可以'&'运算符可用于引用变量以打印其地址吗?
  3. 谢谢!

4 个答案:

答案 0 :(得分:4)

打印对象将调用toString()方法。如果您没有在类中重写此方法,它将打印ClassName @ hashcode

答案 1 :(得分:1)

如果你没有覆盖对象类中的toString()方法,它将调用Object类中定义的默认实现,其中包含:

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.

因此,您将获得Object的hashCode()表示,其可能是也可能不是其地址,因为它依赖于实现。这就是Javadoc所说的hashCode()

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).

答案 2 :(得分:0)

打印对象将调用对象上的toString(),如果没有为该对象覆盖toString(),则返回类似ClassName的字符串@ Hexadecimal_Representation_Of_Hash_Code

对于类Test,输出将类似于:

Test@126b249

hashCode不一定是内存地址,而是特定于实现的。

答案 3 :(得分:0)

当你做

System.out.println(objReference)
调用

toString()实现。如果你已经覆盖了这个,那么你的实现将默认调用,否则将调用Object toString()实现,它将打印该对象的hashCode

如果你看一下String Class,它会覆盖toString方法,这就是做什么时

 System.out.println(stringObjectReference)

请参阅此处的实施http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/String.java#String.toString%28%29

对象引用不会打印对象包含的实际值。