繁体   English   中英

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

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

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

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM