Более конкретная информация для Java:
Автобокс позволяет java автоматически конвертировать такие вещи, как boolean
и int
в их версии объектов Boolean
и Integer
, в большинстве случаев автоматически. Это также позволяет происходить обратному.
Например:
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
В старых версиях java, в которых отсутствует автобокс, этот код должен делать то же самое:
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
Однако есть некоторые сценарии, в которых вам все равно придется что-то делать вручную. Например, представьте, что у вас есть класс с двумя методами, такими как:
assertEquals(int a, int b);
assertEquals(Object a, Object b)
Теперь, если вы попытаетесь сделать это:
Integer a = 3;
int b = 3;
assertEquals(a, b); // this will not compile
Причина, по которой это не работает, заключается в том, что он не может определить, нужно ли ему распаковывать a
в int
или в поле b
в Integer
. Поэтому неоднозначно, какой метод подписи должен быть вызван. Чтобы это исправить, вы можете сделать одно из следующих действий:
assertEquals((int) a, b);
assertEquals(a, (Integer) b);