Nhìn chung, tôi phải nói rằng không có gì đảm bảo rằng cùng một nguồn sẽ tạo ra cùng một mã bytecode khi được biên dịch bởi cùng một trình biên dịch nhưng trên một nền tảng khác.
Tôi sẽ xem xét các tình huống liên quan đến các ngôn ngữ khác nhau (trang mã), ví dụ như Windows có hỗ trợ tiếng Nhật. Hãy suy nghĩ các ký tự nhiều byte; trừ khi trình biên dịch luôn giả định rằng nó cần hỗ trợ tất cả các ngôn ngữ mà nó có thể tối ưu hóa cho ASCII 8-bit.
Trong khuôn khổ Khả năng tương thích nhị phân từ bản phát hành đến bản phát hành trong SOM (Forman, Conner, Danforth và Raper, Proceedings of OOPSLA '95), các mã nhị phân của ngôn ngữ lập trình Java tương thích nhị phân với tất cả các phép biến đổi có liên quan mà các tác giả xác định (với một số lưu ý đối với việc bổ sung các biến cá thể). Sử dụng lược đồ của họ, đây là danh sách một số thay đổi tương thích nhị phân quan trọng mà ngôn ngữ lập trình Java hỗ trợ:
• Thực hiện lại các phương thức, hàm tạo và trình khởi tạo hiện có để cải thiện hiệu suất.
• Thay đổi các phương thức hoặc hàm tạo để trả về giá trị trên các đầu vào mà trước đó chúng đã ném ra các ngoại lệ thường không xảy ra hoặc không thành công bằng cách đi vào vòng lặp vô hạn hoặc gây ra bế tắc.
• Thêm các trường, phương thức hoặc hàm tạo mới vào một lớp hoặc giao diện hiện có.
• Xóa các trường, phương thức hoặc hàm tạo riêng của một lớp.
• Khi toàn bộ gói được cập nhật, xóa các trường, phương thức hoặc phương thức truy cập mặc định (chỉ gói) của các lớp và giao diện trong gói.
• Sắp xếp lại thứ tự các trường, phương thức hoặc hàm tạo trong một khai báo kiểu hiện có.
• Di chuyển một phương thức lên trong phân cấp lớp.
• Sắp xếp lại thứ tự danh sách các bề mặt trực tiếp của một lớp hoặc giao diện.
• Chèn lớp hoặc kiểu giao diện mới trong hệ thống phân cấp kiểu.
Chương này quy định các tiêu chuẩn tối thiểu cho khả năng tương thích nhị phân được đảm bảo bởi tất cả các triển khai. Ngôn ngữ lập trình Java đảm bảo tính tương thích khi các tệp nhị phân của các lớp và giao diện được trộn lẫn mà không được biết là từ các nguồn tương thích, nhưng các nguồn của chúng đã được sửa đổi theo các cách tương thích được mô tả ở đây. Lưu ý rằng chúng tôi đang thảo luận về khả năng tương thích giữa các bản phát hành của một ứng dụng. Phần thảo luận về khả năng tương thích giữa các bản phát hành của nền tảng Java SE nằm ngoài phạm vi của chương này.