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

upI*_*oud 8 java object

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

class Data {
  int a = 5;
}

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

我知道它提供了与对象相关的东西,因为在我的例子中输出是数据@ 1ae73783.我猜1ae73783是十六进制数.我也做了一些工作并打印出来

System.out.println(dObj.hashCode());
Run Code Online (Sandbox Code Playgroud)

我的号码是415360643.我有一个整数值.我不知道什么hashCode()回归,仍然出于好奇,当我将1ae73783转换为十进制时,我得到了415360643!

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

NPE*_*NPE 17

会发生什么是toString()您的类的默认方法被使用.该方法定义如下:

toString类的方法Object返回一个字符串,该字符串由对象为实例的类的名称,符号字符"@"和对象的哈希码的无符号十六进制表示组成.换句话说,此方法返回一个等于值的字符串:

getClass().getName() + '@' + Integer.toHexString(hashCode())
Run Code Online (Sandbox Code Playgroud)

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

尽管合理可行,但是hashCode由class定义的方法Object确实为不同的对象返回不同的整数.(这通常通过将对象的内部地址转换为整数来实现,但JavaTM编程语言不需要此实现技术.)