在java中,如果我们考虑一个类A,我们通过编写来创建它的对象
A aObj = new A();
其中 aObj 是参考变量。
- 打印这个引用变量会打印它引用的对象的地址吗?
- 与 C 的情况一样,可以在引用变量上使用“&”运算符来打印它们的地址吗?
谢谢!
在java中,如果我们考虑一个类A,我们通过编写来创建它的对象
A aObj = new A();
其中 aObj 是参考变量。
谢谢!
打印对象将调用 toString() 方法。如果你不在你的类中重写这个方法,它会打印 ClassName@hashcode
如果您没有覆盖对象类中的toString()方法,它将调用Object
该类中定义的默认实现,即:
类 Object 的 toString 方法返回一个由名称组成的字符串 对象是实例的类,at 符号字符“@”,以及 对象哈希码的无符号十六进制表示。
因此,您将获得 Object 的hashCode()表示,它可能是也可能不是它的地址,因为它取决于实现。这就是 Javadoc 所说的hashCode()
:
尽可能合理地使用 Object 类定义的 hashCode 方法 确实为不同的对象返回不同的整数。(这通常是 通过将对象的内部地址转换为整数来实现, 但是 JavaTM 编程不需要这种实现技术 语)。
打印对象将对对象调用 toString(),如果该对象没有覆盖 toString(),则返回一个类似于 ClassName@Hexadecimal_Representation_Of_Hash_Code 的字符串
对于 Test 类,输出将类似于:
Test@126b249
hashCode 不一定是内存地址,并且是特定于实现的。
当你这样做时
System.out.println(objReference)
调用 toString() 实现。如果您已覆盖它,则默认情况下将调用您的实现,否则将调用 Object toString() 实现,该实现将打印该对象的 hashCode
如果您查看 String 类,它会覆盖 toString 方法,这就是为什么何时做
System.out.println(stringObjectReference)
对象引用不是打印对象包含的实际值。