Eu tenho a seguinte classe Java
public class HelloWorld {
public static void main(String []args) {
}
}
Ao compilar esse arquivo e executar um sha256 no arquivo de classe resultante, recebo
9c8d09e27ea78319ddb85fcf4f8085aa7762b0ab36dc5ba5fd000dccb63960ff HelloWorld.class
Em seguida, modifiquei a classe e adicionei uma linha em branco como esta:
public class HelloWorld {
public static void main(String []args) {
}
}
Novamente, corri um sha256 na saída esperando obter o mesmo resultado, mas, em vez disso, obtive
11f7ad3ad03eb9e0bb7bfa3b97bbe0f17d31194d8d92cc683cfbd7852e2d189f HelloWorld.class
Eu li neste artigo do TutorialsPoint que:
Uma linha contendo apenas espaço em branco, possivelmente com um comentário, é conhecida como linha em branco e o Java a ignora totalmente.
Portanto, minha pergunta é: como o Java ignora linhas em branco, por que o código de código compilado é diferente para os dois programas?
Ou seja, a diferença de que em HelloWorld.class
um 0x03
byte é substituída por um 0x04
byte.
Set
s imutáveis com randomização internamente, ele poderá produzir uma ordem diferente em cada execução. Também poderia adicionar um atributo personalizado contendo o tempo de compilação. E assim por diante ...