JavaScript is required

Đoạn chương trình sau xảy ra lỗi gì?

byte b = 50;

b = b * 50;

A.

b không thể chứa giá trị 100, giới hạn bởi khoảng biểu diễn.

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.

C.

b không thể chứa giá trị 50.

D.

Không có lỗi trong đoạn code này.

Trả lời:

Đá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.

Câu hỏi liên quan