Chữ 127 biểu thị một giá trị của kiểu int. Chữ 1. cũng vậy, tổng của hai số này là số nguyên 128. Vấn đề, trong trường hợp thứ hai, là bạn đang gán giá trị này cho một biến kiểu byte. Nó không có gì để làm với giá trị thực tế của các biểu thức. Nó phải làm với Java không hỗ trợ các ép buộc (*). Bạn phải thêm một kiểu chữ
byte b = (byte)(127 + 1);
và sau đó nó biên dịch.
(*) ít nhất không phải là kiểu String-to-integ, float-to-Time, ... Java không hỗ trợ các cưỡng chế nếu theo nghĩa nào đó, chúng không bị mất (Java gọi đây là "mở rộng").
Và không, từ "ép buộc" không cần sửa. Nó đã được lựa chọn rất có chủ ý và chính xác tại đó. Từ nguồn gần nhất đến tay (Wikipedia): "Trong hầu hết các ngôn ngữ, từ cưỡng chế được sử dụng để biểu thị một chuyển đổi ngầm , trong quá trình biên dịch hoặc trong thời gian chạy." và "Trong khoa học máy tính, chuyển đổi kiểu, đánh máy và ép buộc là những cách khác nhau, ngầm hoặc rõ ràng, thay đổi một thực thể của một loại dữ liệu thành một loại dữ liệu khác."
byte
kiểu dữ liệu lại đau như vậy?!