У мене є наступний клас 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 з рандомізацією внутрішньо, він може створювати різний порядок на кожному запуску. Він також може додати спеціальний атрибут, що містить час компіляції. І так далі…