java - 未在字节码中扩展 java.lang.Object。那么为什么编译器不将它添加到新版本的java中呢?

标签 java bytecode

我有简单的代码如下

package prashant;
public class CheckObject {
}

我使用了javap -c CheckObject并得到了以下字节码:

 Compiled from "CheckObject.java"
 public class prashant.CheckObject {
 public prashant.CheckObject();
 Code:
   0: aload_0       
   1: invokespecial #8                  // Method java/lang/Object."<init>":()V
   4: return        
  }

在旧版本的 Java 中,隐式编译器在字节代码中添加 extends Object ,如下所示:

public class prashant.CheckObject extends java.lang.Object

所以我有两个关于扩展对象的问题:

1) 是否由于性能受到影响而未添加?

2)在哪个java版本中它被改变了?

用于编译此代码的java版本是1.6.0_45

最佳答案

您正在打印反汇编代码,而不是原始字节码,并且反汇编代码被设计为人类可读的。没有声明父类(super class)的对象必然扩展Object(如构造函数上的注释所示),因此列出它是多余的。

关于java - 未在字节码中扩展 java.lang.Object。那么为什么编译器不将它添加到新版本的java中呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28341641/

相关文章:

java - 无法使用 Spring Boot 将简单的 "Hello World"消息发送到 RabbitMQ 队列

java - 是否有一个 Java 映射只接受一个条目并允许从映射中获取值?

java - JMockit:模拟的 api 会在一段时间后恢复

java - 如何在java字节码中引用 "this"对象

profiling - Java Instrumentation中agentmain方法的用途是什么

java - arraylist循环不显示

java - List<CustomObject> 和 HashMap <String, Object> 之间有什么优势吗

java - 带括号的数学运算的正则表达式

java - JVM - 非 jit 编译的代码如何运行

java - 使用 Byte Buddy 拦截对我的 Java 和 Groovy 代码的方法调用 : Strange java. lang.VerifyError