У меня есть следующий класс 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
s с рандомизацией внутри, он может создавать разные порядки при каждом запуске. Он также может добавить пользовательский атрибут, содержащий время компиляции. И так далее ...