我有以下的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
字节。