Ho la seguente classe Java
public class HelloWorld {
public static void main(String []args) {
}
}
Quando compilo questo file ed eseguo uno sha256 sul file di classe risultante ottengo
9c8d09e27ea78319ddb85fcf4f8085aa7762b0ab36dc5ba5fd000dccb63960ff HelloWorld.class
Successivamente ho modificato la classe e ho aggiunto una riga vuota come questa:
public class HelloWorld {
public static void main(String []args) {
}
}
Ancora una volta ho eseguito uno sha256 sull'output aspettandomi di ottenere lo stesso risultato ma invece ho ottenuto
11f7ad3ad03eb9e0bb7bfa3b97bbe0f17d31194d8d92cc683cfbd7852e2d189f HelloWorld.class
Ho letto su questo articolo TutorialsPoint che:
Una riga contenente solo spazi bianchi, possibilmente con un commento, è nota come riga vuota e Java lo ignora totalmente.
Quindi la mia domanda è, poiché Java ignora le righe vuote perché il bytecode compilato è diverso per entrambi i programmi?
Vale a dire la differenza in quella in HelloWorld.class
un 0x03
byte è sostituita da un 0x04
byte.
Set
con randomizzazione internamente, potrebbe produrre un ordine diverso ad ogni esecuzione. Potrebbe anche aggiungere un attributo personalizzato contenente il tempo di compilazione. E così via ...