2014-07-12 16 views
7
public static void main(String[] args) { 

    final int a =15; 
    byte b = a; 
    System.out.println(a); 
    System.out.println(b); 
} 

Ở trên mã khi tôi chuyển đổi từ int sang byte nó không đưa ra lỗi biên dịch nhưng khi chuyển đổi từ lâu sang int lỗi, TẠI SAO?Loại vấn đề truyền từ int sang byte sử dụng từ khóa cuối cùng trong java

public static void main(String[] args) { 

    final long a =15; 
    int b = a; 
    System.out.println(a); 
    System.out.println(b); 
} 
+2

Nó chỉ là một mụn cóc khác trên kiến ​​trúc. Có nhiều. Một số ít có một "lý do" - hầu hết là không. –

Trả lời

11

Từ the JLS section on assignment conversions:

Bên cạnh đó, nếu biểu thức là một biểu thức hằng kiểu byte, short, char, hoặc int:

  • Chuyển đổi nguyên thủy thu hẹp có thể được sử dụng nếu loại biến là byte, short hoặc char và val ue của biểu thức hằng số là biểu thị trong kiểu biến.

Khi bạn khai báo và khởi tạo final a của bạn, đó là một thời gian biên dịch biểu thức hằng số, và trình biên dịch có thể xác định rằng giá trị 15 một cách an toàn sẽ phù hợp trong một byte. JLS chỉ đơn giản là không cho phép thu hẹp chuyển đổi tiềm ẩn từ long, mà không giải thích và quy tắc này quay lại ít nhất là Java 2 (JLS sớm nhất tôi có thể tìm thấy ở bất kỳ đâu).

tôi sẽ suy đoán rằng lý do có thể xuất phát từ một thực tế là bytecode Java được định nghĩa cho một kích thước từ 32-bit và hoạt động trên một long là logic phức tạp hơn và tốn kém.

Các vấn đề liên quan