我有以下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
仅包含空格(可能带有注释)的行被称为空白行,而Java完全忽略了它。
所以我的问题是,由于Java忽略空白行,两个程序的编译字节码为何不同?
即在该差HelloWorld.class
一个0x03
字节是由替换0x04
字节。
Set
内部使用具有随机化功能的新的不可变,则每次运行可能会产生不同的顺序。它还可以添加包含编译时的自定义属性。等等…