我想知道当我执行以下操作时,输出到底是什么。
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() http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html#toString%28%29你的班级的方法正在被使用。该方法定义如下:
The toString
类的方法Object
返回一个字符串,其中包含对象作为实例的类的名称、at 符号“@”以及对象哈希码的无符号十六进制表示形式。换句话说,此方法返回一个等于以下值的字符串:
getClass().getName() + '@' + Integer.toHexString(hashCode())
默认返回的值hashCode() http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html#hashCode%28%29方法是特定于实现的:
只要合理可行,hashCode
类定义的方法Object
确实为不同的对象返回不同的整数。 (这通常是通过将对象的内部地址转换为整数来实现的,但 JavaTM 编程语言不需要这种实现技术。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)