2012-12-17 31 views
6

thể trùng lặp:
Java: Long result = -1: cannot convert from int to longTại sao Java không hỗ trợ cưỡng chế và autoboxing?

Ví dụ Integer foo = 4Long foo = 4L cả biên dịch, nhưng Long foo = 4 không. Có lý do nào cho việc này không?

+2

Câu hỏi hay. Tôi tự hỏi nếu điều đó sẽ gây ra một số sự mơ hồ. (+1) – NPE

+0

Về mặt kỹ thuật, 'Long foo = 4' không thể được đánh giá tại thời gian biên dịch. –

+0

Bạn kết hợp chuyển đổi với hộp số tự động. – Bevor

Trả lời

4
Long foo = 4; 

có nghĩa là: chỉ định int giá trị 4 cho đối tượng lớp Long. Nó sẽ cố gắng sử dụng autoboxing để làm như vậy và thất bại, bởi vì autoboxing chỉ áp dụng cho nguyên thủy thích hợp. Nó có thể được cố định bằng hai cách:

Long foo = (long) 4; 
Long foo = 4L; 

trong trường hợp đầu tiên bạn cast int 4-long 4. Trong phần thứ hai, bạn cung cấp một chặng đường dài.

Để trả lời câu hỏi: Java không hỗ trợ tự động truyền và là rất nghiêm ngặt khi nhập, đó có thể là lý do tại sao nó không tự động hỗ trợ.

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