Более конкретная информация для Java:
Autoboxing позволяет 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, которые не имеют Autoboxing потребуется этот код, чтобы сделать то же самое:
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);