次の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
Set
内部でランダム化された新しい不変のを使用すると、実行ごとに異なる順序が生成される可能性があります。また、コンパイル時を含むカスタム属性を追加することもできます。その他…