Tôi có lớp Java sau
public class HelloWorld {
public static void main(String []args) {
}
}
Khi tôi biên dịch tệp này và chạy sha256 trên tệp lớp kết quả, tôi nhận được
9c8d09e27ea78319ddb85fcf4f8085aa7762b0ab36dc5ba5fd000dccb63960ff HelloWorld.class
Tiếp theo tôi đã sửa đổi lớp và thêm một dòng trống như thế này:
public class HelloWorld {
public static void main(String []args) {
}
}
Một lần nữa tôi chạy sha256 trên đầu ra với mong muốn nhận được kết quả tương tự nhưng thay vào đó tôi đã nhận được
11f7ad3ad03eb9e0bb7bfa3b97bbe0f17d31194d8d92cc683cfbd7852e2d189f HelloWorld.class
Tôi đã đọc bài viết trên Hướng dẫn này rằng:
Một dòng chỉ chứa khoảng trắng, có thể có một nhận xét, được gọi là một dòng trống và Java hoàn toàn bỏ qua nó.
Vì vậy, câu hỏi của tôi là, vì Java bỏ qua các dòng trống tại sao mã byte được biên dịch lại khác nhau cho cả hai chương trình?
Cụ thể là sự khác biệt trong HelloWorld.class
một 0x03
byte được thay thế bằng một 0x04
byte.
Set
s bất biến mới với ngẫu nhiên trong nội bộ, nó có thể tạo ra một thứ tự khác nhau trên mỗi lần chạy. Nó cũng có thể thêm một thuộc tính tùy chỉnh chứa thời gian biên dịch. Và cứ thế trên đường