Không có toán tử + nào cho byte
. Thay vào đó, cả hai toán hạng được thăng int, vì vậy bạn đã có
byte = byte + byte
... becomes (widening to find + operator) ...
byte = int + int
... becomes (result of + operator) ...
byte = int
... mà sau đó thất bại vì không có chuyển đổi ngầm từ int
để byte
. Bạn cần phải cast:
byte a = 1;
byte b = 2;
byte c = (byte) (a + b);
Sau đây là các thực tế quy tắc để quảng bá số, từ section 5.6.2 of the JLS:
Khi một nhà điều hành áp dụng chương trình khuyến mãi số nhị phân sang một cặp toán hạng, mỗi trong số đó phải biểu thị một giá trị có thể chuyển đổi thành loại số, các quy tắc sau áp dụng theo thứ tự, sử dụng chuyển đổi mở rộng (§5.1.2) để chuyển đổi toán hạng khi cần:
- Nếu bất kỳ toán hạng nào thuộc loại tham chiếu, chuyển đổi unboxing (§5.1.8) được thực hiện. Sau đó:
- Nếu một trong hai toán hạng là loại gấp đôi thì toán tử còn lại được chuyển đổi thành gấp đôi.
- Nếu không, nếu toán hạng là loại phao, thì toán tử còn lại được chuyển thành phao.
- Nếu không, nếu toán hạng là loại dài, cột kia được chuyển đổi thành dài.
- Nếu không, cả hai toán hạng sẽ được chuyển thành loại int.
Nguồn
2009-11-02 11:57:33
có thể trùng lặp của [Tại sao tôi không thể thêm hai byte và nhận được một int và tôi có thể thêm hai byte cuối cùng nhận được một byte?] (http://stackoverflow.com/questions/13100019/why-can-not-i-add-two-bytes-and-get-an-int-and-i-can- add-two-final-bytes-get-ab) –