Tengo la siguiente clase de Java
public class HelloWorld {
public static void main(String []args) {
}
}
Cuando compilo este archivo y ejecuto un sha256 en el archivo de clase resultante, obtengo
9c8d09e27ea78319ddb85fcf4f8085aa7762b0ab36dc5ba5fd000dccb63960ff HelloWorld.class
Luego modifiqué la clase y agregué una línea en blanco como esta:
public class HelloWorld {
public static void main(String []args) {
}
}
Nuevamente ejecuté un sha256 en la salida esperando obtener el mismo resultado, pero en su lugar obtuve
11f7ad3ad03eb9e0bb7bfa3b97bbe0f17d31194d8d92cc683cfbd7852e2d189f HelloWorld.class
He leído en este artículo de TutorialsPoint que:
Una línea que contiene solo espacios en blanco, posiblemente con un comentario, se conoce como una línea en blanco, y Java la ignora por completo.
Entonces mi pregunta es, dado que Java ignora las líneas en blanco, ¿por qué el código de bytes compilado es diferente para ambos programas?
Es decir, la diferencia en que en HelloWorld.class
un 0x03
byte se reemplaza por un 0x04
byte.
Set
s inmutables con aleatorización internamente, podría producir un orden diferente en cada ejecución. También podría agregar un atributo personalizado que contenga el tiempo de compilación. Y así sucesivamente ...