System.out.println(对象)的输出

时间:2012-11-21 16:54:18

标签: java object

我想知道当我执行以下操作时输出到底是什么。

class Data {
  int a = 5;
}

class Main {
  public static void main(String[] args) {
    data dObj = new data();
    System.out.println(dObj);
  }
}

我知道它提供了与object相关的东西,因为我的输出是 data @ 1ae73783 。我猜 1ae73783 是十六进制数。我也做了一些工作并打印

System.out.println(dObj.hashCode());

我得到了号码 415360643 。我有一个整数值。当我将 1ae73783 转换为十进制时,我不知道hashCode()还是出于好奇,我得到 415360643

这就是为什么我很好奇这个数字到底是什么。这是Java沙盒的一些内存位置还是其他一些东西?

4 个答案:

答案 0 :(得分:17)

您的课程的默认toString()方法会被使用,会发生什么。该方法定义如下:

  

toString的{​​{1}}方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@”和无符号的十六进制表示形式组成。对象的哈希码。换句话说,此方法返回一个等于值的字符串:

Object

默认hashCode()方法返回的值是特定于实现的:

  

尽可能合理,类getClass().getName() + '@' + Integer.toHexString(hashCode()) 定义的hashCode方法确实为不同的对象返回不同的整数。 (这通常通过将对象的内部地址转换为整数来实现,但JavaTM编程语言不需要此实现技术。)

答案 1 :(得分:3)

当您打印类的实例时,它不会覆盖toString方法,而是使用toString类的Object方法。其中以下列形式打印输出: -

data@1ae73783
  • output的第一部分显示了对象的类型。

  • 第二部分是hashCode的十六进制表示 你的对象。

以下是Object.toString()方法的源代码,您可以在jdk文件夹下的src的安装目录中找到: -

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

答案 2 :(得分:3)

Object课程中的hashCode()toString()的Javadoc应该能够为您澄清这一点。

答案 3 :(得分:2)

该代码调用toString()类的默认Object实现,即:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}