2010-07-20 9 views
6

Điều gì đang xảy ra khi đối tượng java.lang.Double được khởi tạo mà không sử dụng lệnh gọi hàm tạo nhưng thay vì sử dụng nguyên thủy? Nó xuất hiện để làm việc nhưng tôi không hoàn toàn chắc chắn lý do tại sao. Có một số loại chuyển đổi tiềm ẩn xảy ra với trình biên dịch? Này được sử dụng Java 5.Khởi tạo đối tượng Đôi với giá trị kép nguyên thủy

public class Foo { 

    public static void main(String[] args) { 
     Double d = 5.1; 

     System.out.println(d.toString()); 

    } 

} 
+1

Bây giờ khi biết rằng nó được gọi là autoboxing, bạn có thể tìm thấy rất nhiều [bài viết thú vị trong SO] (http://stackoverflow.com/search?q= [java] + autoboxing) :) –

+0

Tự động hóa, đó là những gì tôi đang tìm kiếm cho. Cảm ơn SO! –

Trả lời

9

này được gọi là Autoboxing mà là một tính năng được bổ sung trong Java 5. Nó sẽ tự động chuyển đổi giữa các kiểu dữ liệu và các loại wrapper như double (nguyên thủy) và java.lang.Double (các đối tượng wrapper). Trình biên dịch java tự động biến đổi dòng:

Double d = 5.1; 

thành:

Double d = Double.valueOf(5.1); 
5

Nó được gọi là AutoBoxing

autoboxing và Auto-Unboxing của loại Primitive Chuyển đổi giữa loại nguyên thủy, như int, boolean, và các đối tượng tương ứng dựa trên Đối tượng đối tác của chúng như Integer a nd Boolean, có thể yêu cầu số tiền không cần thiết của mã hóa thêm , đặc biệt nếu chuyển đổi chỉ cần thiết cho phương thức gọi API thu thập, cho ví dụ .

Tự động đóng hộp và tự động mở hộp là Các nguyên thủy Java tạo mã mã là ngắn gọn hơn và dễ theo dõi hơn. Trong ví dụ tiếp theo, một int là được lưu trữ và sau đó được truy xuất từ ​​ ArrayList. Phiên bản 5.0 rời khỏi chuyển đổi cần thiết để chuyển đổi sang một Số nguyên và quay lại trình biên dịch.

Trước

ArrayList<Integer> list = new ArrayList<Integer>(); 
    list.add(0, new Integer(42)); 
    int total = (list.get(0)).intValue(); 

Sau

ArrayList<Integer> list = new ArrayList<Integer>(); 
    list.add(0, 42); 
    int total = list.get(0);