2013-02-22 27 views
5
class Test{ 
    public static void main(String[] args){ 
     int a = 1; 
     int b = 5; 

     Integer c = new Integer(1); 
     Integer d = 5; //autoboxing at work 

     System.out.println(c.compareTo(d)); 
     System.out.println(a.compareTo(b)); 
    } 
} 

Tại sao không a.compareTo(b) biên dịch (int cannot be dereferenced)? Tôi biết rằng compareTo yêu cầu các đối tượng, nhưng tôi nghĩ autoboxing sẽ tự động tạo một int một Integer khi cần thiết. Tại sao autoboxing không xảy ra trong trường hợp này? Và những trường hợp nào khác sẽ không xảy ra?Java không có autoboxing cho int cho phương thức compareTo?

Trả lời

4

Từ Oracle tutorial on Autoboxing, hai trường hợp đấm bốc sẽ xảy ra là, khi nguyên thủy là:

  • Qua như một tham số để một phương pháp mà hy vọng một đối tượng của lớp wrapper tương ứng.
  • Được gán cho một biến của lớp trình bao bọc tương ứng.

Biểu thức đang được đánh giá trong ví dụ của bạn (a.compareTo(d)) không rơi vào bất kỳ trường hợp nào trong số đó.

Có một số thông tin bổ sung thú vị trong JCP proposal for autoboxing, mô tả các cơ chế và quy tắc cho chuyển đổi chuyển nhượng, chuyển đổi lời gọi phương thức và chuyển đổi truyền.

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