Bardziej szczegółowe informacje na Java:
autoboxing Java pozwala na automatyczne automatycznie konwertować rzeczy jak boolean
i int
do ich wersji obiektu Boolean
i Integer
w większości przypadków. Pozwala również na odwrót.
Na przykład:
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
starszych wersji Java, które nie mają autoboxing będą wymagały tego kodu, aby zrobić to samo:
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
Jednak istnieją pewne sytuacje, w których nadal mają robić rzeczy ręcznie. Na przykład, wyobraź sobie, że masz klasę z dwóch metod tak:
assertEquals(int a, int b);
assertEquals(Object a, Object b)
Teraz, jeśli spróbujesz to zrobić:
Integer a = 3;
int b = 3;
assertEquals(a, b); // this will not compile
Powodem tego nie działa dlatego, że nie może dowiedzieć się, czy należy rozwinąć a
do int
lub pole b
na Integer
. Dlatego jest niejednoznaczne, który sygnaturę metody należy wywołać. Aby rozwiązać ten problem można wykonać jedną z nich:
assertEquals((int) a, b);
assertEquals(a, (Integer) b);