我有以下Java类
public class HelloWorld { public static void main(String []args) { } }
当我编译这个文件并在生成的类文件上运行 sha256 时,我得到
9c8d09e27ea78319ddb85fcf4f8085aa7762b0ab36dc5ba5fd000dccb63960ff HelloWorld.class
接下来我修改了类并添加了一个空行,如下所示:
我再次在输出上运行 sha256 期望得到相同的结果,但我得到了
11f7ad3ad03eb9e0bb7bfa3b97bbe0f17d31194d8d92cc683cfbd7852e2d189f HelloWorld.class
我在这篇 TutorialsPoint 文章中读到:
仅包含空格的行,可能带有注释,称为空行,Java 完全忽略它。
所以我的问题是,既然 Java 忽略了空行,为什么两个程序的编译字节码不同?
即用HelloWorld.class一个0x03字节代替一个0x04字节中的区别。
HelloWorld.class
0x03
0x04
基本上,行号是为调试而保留的,因此如果您按照您所做的方式更改源代码,您的方法会从不同的行开始,并且编译的类会反映差异。