Nếu short
được tự động thăng hạng int
trong các phép toán số học, thì tại sao lại là:
short thirty = 10 * 3;
Một chuyển nhượng hợp pháp cho short
biến thirty
?
Đổi lại, điều này:
short ten = 10;
short three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED
cũng như điều này:
int ten = 10;
int three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED
không biên dịch vì không cho phép gán int
giá trị cho a short
mà không truyền như mong đợi.
Có điều gì đặc biệt đang xảy ra về các chữ số?
10 * 3
và khởi tạo biến với kết quả. Trong ví dụ không hoạt động của bạn, phép tính xảy ra trong thời gian chạy mà JVM truyền đoạn ngắn.
final int ten = 10; final int three = 3; short thirty = ten * three;
biên dịch tốt.
If short is automatically promoted to int in arithmetic operations
- điều đó không liên quan. Cả 10
hay 3
là quần short cũng không phải là họ thăng chức, họ literals đang.
10
và 3
được đánh giá là int
s bởi trình biên dịch?
short thirty = 10 * 3;
hầu hết có lẽ được thay thế bởishort thirty = 30;
trình biên dịch, sau đó là một câu lệnh hợp lệ. (Tuy nhiên, tôi sẽ phải tra cứu phần JLS có liên quan).