ฉันมีคลาส 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 ละเว้นบรรทัดว่างเหตุใด bytecode ที่คอมไพล์จึงแตกต่างกันสำหรับทั้งสองโปรแกรม
คือความแตกต่างในว่าในไบต์จะถูกแทนที่ด้วยไบต์HelloWorld.class
0x03
0x04
Set
s ไม่เปลี่ยนรูปแบบใหม่ที่มีการสุ่มภายในก็สามารถสร้างคำสั่งที่แตกต่างกันในการทำงานแต่ละครั้ง นอกจากนี้ยังสามารถเพิ่มแอตทริบิวต์ที่กำหนดเองที่มีเวลารวบรวม และอื่น ๆ ...