当前位置: 首页 > 面试题库 >

System.out.println(object)的输出

巫马欣嘉
2023-03-14
问题内容

当我执行以下操作时,我想知道确切的输出是什么。

class Data {
  int a = 5;
}

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

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

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

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

这就是为什么我对这个数字到底是什么感到好奇。这是Java沙箱的某个内存位置还是其他东西?


问题答案:

发生的事情是toString()该类的默认方法正在使用。此方法定义如下:

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

getClass().getName() + '@' + Integer.toHexString(hashCode())

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

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



 类似资料:
  • 问题内容: 如何为Java输出着色? 例如,在C语言和其他语言中,我可以像这样使用ANSI-escape 。但是在Java中它不起作用。 问题答案: 否,但是有第三方API可以处理 http://www.javaworld.com/javaworld/javaqa/2002-12/02-qa-1220-console.html 编辑:当然,有比我发布的文章新的文章,但是该信息仍然可行。

  • 我是编程新手,我们从学校得到了一个例子来了解扫描仪是如何工作的。我的问题是,我不明白为什么消息“Input”(while循环中的System.out.println)会被打印两次。

  • 问题内容: 如果多个线程在不同步的情况下调用System.out.println(String),输出是否可以交错?还是每行的写入都是原子的?该API只字不提同步的,所以这似乎是可能的,或者是由交错缓冲和/或虚拟机存储器模型等防止输出? 编辑: 例如,如果每个线程包含: 保证输出是: 或者可能是: 问题答案: 由于API文档没有提及System.out对象的线程安全性,因此该PrintStream

  • 修饰符字符串- 事件的修饰符数组,可以是 shift, control, ctrl, alt, meta, command, cmd, isKeypad,isAutoRepeat, leftButtonDown, middleButtonDown, rightButtonDown,capsLock, numLock, left, right.

  • 我想5是int。但没有变数。我不知道为什么输出是双倍。我已经试过Netbeans了。

  • 问题内容: 以下代码中有错误吗?它显示找不到符号,符号:类出位置:类系统。在日志中,它显示了很多错误,包括 java.lang.ClassFormatError:类Area中的方法“”具有非法签名“(Ljava / lang / Object;)Ljava / lang / System $ out $ println;” 问题答案: 该语句应写在某些块中。不能直接在课堂上写。 它应该放在大括号内