小编典典

为什么 Java 类的编译与空行不同?

all

我有以下Java类

public class HelloWorld {
  public static void main(String []args) {
  }
}

当我编译这个文件并在生成的类文件上运行 sha256 时,我得到

9c8d09e27ea78319ddb85fcf4f8085aa7762b0ab36dc5ba5fd000dccb63960ff  HelloWorld.class

接下来我修改了类并添加了一个空行,如下所示:

public class HelloWorld {

  public static void main(String []args) {
  }
}

我再次在输出上运行 sha256 期望得到相同的结果,但我得到了

11f7ad3ad03eb9e0bb7bfa3b97bbe0f17d31194d8d92cc683cfbd7852e2d189f  HelloWorld.class

我在这篇 TutorialsPoint
文章
中读到:

仅包含空格的行,可能带有注释,称为空行,Java 完全忽略它。

所以我的问题是,既然 Java 忽略了空行,为什么两个程序的编译字节码不同?

即用HelloWorld.class一个0x03字节代替一个0x04字节中的区别。


阅读 69

收藏
2022-06-23

共1个答案

小编典典

基本上,行号是为调试而保留的,因此如果您按照您所做的方式更改源代码,您的方法会从不同的行开始,并且编译的类会反映差异。

2022-06-23