Đoạn chương trình sau xảy ra lỗi gì?
byte b = 50;
b = b * 50;
Đáp án đúng: B
Trong Java, khi thực hiện các phép toán số học trên các kiểu dữ liệu nhỏ hơn int
(như byte
, short
, char
), các giá trị này sẽ được tự động chuyển đổi (promote) thành kiểu int
trước khi thực hiện phép toán. Do đó, biểu thức b * 50
sẽ được tính toán như là một phép nhân giữa hai số kiểu int
, và kết quả sẽ là một số kiểu int
.
Khi bạn gán kết quả này (kiểu int
) trở lại cho biến b
(kiểu byte
), trình biên dịch sẽ báo lỗi vì bạn đang cố gắng gán một giá trị kiểu int
cho một biến kiểu byte
mà không có ép kiểu tường minh (explicit casting). Việc này có thể gây mất dữ liệu vì kiểu int
có kích thước lớn hơn kiểu byte
.
Vì vậy, đáp án đúng là B: Toán tử nhân chuyển b*50 sang kiểu int, nhưng kiểu int không thể chuyển đổi về kiểu byte mà không sử dụng casting.