[英]Output of System.out.println(object)
我想知道当我执行以下操作时输出到底是什么。
class Data {
int a = 5;
}
class Main {
public static void main(String[] args) {
data dObj = new data();
System.out.println(dObj);
}
}
我知道它提供了与对象相关的东西,因为在我的例子中输出是数据@ 1ae73783 。 我猜1ae73783是十六进制数。 我也做了一些工作并打印出来
System.out.println(dObj.hashCode());
我的号码是415360643 。 我有一个整数值。 我不知道hashCode()
返回什么,仍然出于好奇,当我将1ae73783转换为十进制时,我得到了415360643 !
这就是为什么我很好奇这个数字到底是什么。 这是Java沙箱的一些内存位置还是其他一些东西?
会发生什么是你的类的默认toString()
方法被使用。 该方法定义如下:
类
Object
的toString
方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@”和对象的哈希码的无符号十六进制表示组成。 换句话说,此方法返回一个等于值的字符串:getClass().getName() + '@' + Integer.toHexString(hashCode())
默认的hashCode()
方法返回的值是特定于实现的:
尽可能合理,
Object
类定义的hashCode
方法确实为不同的对象返回不同的整数。 (这通常通过将对象的内部地址转换为整数来实现,但JavaTM编程语言不需要此实现技术。)
当您打印类的实例时,它不会覆盖toString
方法,而是使用Object
类的toString
方法。 以表格形式打印输出: -
data@1ae73783
该output
的第一部分显示了对象的类型。
第二部分是对象的hashCode
的十六进制表示。
这是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());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.