J'ai la classe Java suivante
public class HelloWorld {
public static void main(String []args) {
}
}
Lorsque je compile ce fichier et exécute un sha256 sur le fichier de classe résultant, j'obtiens
9c8d09e27ea78319ddb85fcf4f8085aa7762b0ab36dc5ba5fd000dccb63960ff HelloWorld.class
Ensuite, j'ai modifié la classe et ajouté une ligne vierge comme celle-ci:
public class HelloWorld {
public static void main(String []args) {
}
}
Encore une fois, j'ai exécuté un sha256 sur la sortie en espérant obtenir le même résultat, mais à la place, j'ai
11f7ad3ad03eb9e0bb7bfa3b97bbe0f17d31194d8d92cc683cfbd7852e2d189f HelloWorld.class
J'ai lu sur cet article TutorialsPoint que:
Une ligne contenant uniquement des espaces blancs, éventuellement avec un commentaire, est connue comme une ligne vierge et Java l'ignore totalement.
Donc ma question est, puisque Java ignore les lignes vides, pourquoi le bytecode compilé est-il différent pour les deux programmes?
A savoir la différence en ce que dans HelloWorld.class
un 0x03
octet est remplacée par un 0x04
octet.
Set
s immuables avec randomisation en interne, il pourrait produire un ordre différent à chaque exécution. Il pourrait également ajouter un attribut personnalisé contenant le temps de compilation. Et ainsi de suite…