Tại sao tôi có thể làm điều này:Tại sao tôi có thể gán một số nguyên cho một biến kiểu ngắn nhưng không phải là một tham số phương thức kiểu ngắn?
short a = 5;
Nhưng không này:
void setNum(short a);
setNum(5);
Nó ném:
chuyển đổi tổn hao có thể xảy ra từ int ngắn
Tôi hiểu rằng 5 là một số nguyên theo nghĩa đen và bạn phải ca st nó. Tôi cũng hiểu rằng nếu giá trị không phải là một hằng số thì rõ ràng là nó cần phải ném lỗi đó bởi vì có lẽ giá trị đạt đến giới hạn của một loại ngắn. Nhưng tại sao nếu trình biên dịch biết tôi đang đi qua một hằng số mà một đoạn ngắn có thể giữ (như trong bài tập) nó không cho phép nó biên dịch? Ý tôi là, sự khác biệt giữa chúng là gì?
Trình biên dịch tuân theo đặc tả ngôn ngữ, mà dường như không gọi cho chuyển đổi trong trường hợp này. Điều đó có vẻ hơi không nhất quán, nhưng có lẽ không phải là một câu trả lời hay cho * tại sao * spec là như thế này (trừ khi ai đó đào lên một cái gì đó từ một danh sách gửi thư đặc tả ngôn ngữ Java). – Thilo
Đây chỉ là một đoán, nhưng: Trong ví dụ đầu tiên, có thể '5' có thể được đọc dưới dạng' short' literal * khi phân tích cú pháp *, trong khi trong ví dụ thứ hai, trình phân tích cú pháp không biết loại đối số phương thức, do đó, nó mặc định được phân tích cú pháp dưới dạng chữ 'int'. –
@ChrisMartin Vâng, những gì một trình phân tích cú pháp không nhất quán sau đó, như Thilo nói – GabrielBB