thông tin cụ thể hơn cho Java:
autoboxing cho phép java để tự động chuyển đổi những thứ như boolean
và int
với các phiên bản đối tượng của họ Boolean
và Integer
tự động trong hầu hết các trường hợp. Nó cũng cho phép điều ngược lại xảy ra.
Ví dụ:
int a = 3; // no boxing is happening
Integer b = 3; // newer versions of java automatically convert the int 3 to Integer 3
int c = b; // these same versions also automatically convert Integer 3 to int 3
Cũ hơn phiên bản của java không có autoboxing sẽ đòi hỏi mã này để làm điều tương tự:
int a = 3; // works the same
Integer b = new Integer(3); //must set up a Integer object manually
int c = b.intValue(); //must change Integer object to a primitive
Tuy nhiên, có một số tình huống mà bạn vẫn có để làm mọi thứ theo cách thủ công. Ví dụ, hãy tưởng tượng bạn có một lớp học với hai phương pháp như vậy:
assertEquals(int a, int b);
assertEquals(Object a, Object b)
Bây giờ, nếu bạn cố gắng để làm điều này:
Integer a = 3;
int b = 3;
assertEquals(a, b); // this will not compile
Lý do này không hoạt động là bởi vì nó không thể tìm ra có nên bỏ chọn a
thành int
hoặc hộp b
thành số Integer
. Vì vậy nó là mơ hồ mà phương pháp chữ ký nên được gọi là. Để khắc phục điều này, bạn có thể thực hiện một trong các cách sau:
assertEquals((int) a, b);
assertEquals(a, (Integer) b);
Nguồn
2009-09-13 17:37:15