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()方法被使用。 该方法定义如下:

ObjecttoString方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@”以及对象的哈希码的无符号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()); }