Nếu shortđược tự động thăng hạng inttrong 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 shortbiế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 intgiá trị cho a shortmà không truyền như mong đợi.
Có điều gì đặc biệt đang xảy ra về các chữ số?
10 * 3và 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ả 10hay 3là quần short cũng không phải là họ thăng chức, họ literals đang.
10và 3được đánh giá là ints 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).