System.out.println(对象)的输出
我想知道当我执行以下操作时输出到底是什么。
class Data { int a = 5; } class Main { public static void main(String[] args) { data dObj = new data(); System.out.println(dObj); } }
我知道它提供了与对象相关的东西,因为在我的例子中输出是数据@ 1ae73783 。 我猜1ae73783是hex数。 我也做了一些工作并打印出来
System.out.println(dObj.hashCode());
我的号码是415360643 。 我有一个整数值。 我不知道hashCode()
返回什么,仍然出于好奇,当我将1ae73783转换为十进制时,我得到了415360643 !
这就是为什么我很好奇这个数字到底是什么。 这是Java的沙箱或其他东西的一些内存位置吗?
会发生什么是你的类的默认toString()
方法被使用。 该方法定义如下:
类
Object
的toString
方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@”以及对象的哈希码的无符号hex表示组成。 换句话说,此方法返回一个等于值的字符串:getClass().getName() + '@' + Integer.toHexString(hashCode())
默认的hashCode()
方法返回的值是特定于实现的:
尽可能合理,
Object
类定义的hashCode
方法确实为不同的对象返回不同的整数。 (这通常通过将对象的内部地址转换为整数来实现,但JavaTM编程语言不需要此实现技术。)
当您打印类的实例时,它不会覆盖toString
方法,那么将使用Object
类的toString
方法。 其中打印输出forms: –
data@1ae73783
-
该
output
的第一部分显示了对象的类型。 -
第二部分是对象的
hashCode
的hex表示。
这是Object.toString()
方法的源代码,您可以在jdk
的安装目录中找到src
文件夹: –
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
Object
类中的hashCode()和toString()的Javadoc应该能够为您阐明这一点。
该代码调用Object
类的默认toString()
实现,即:
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }