Автоупаковка/распаковка помогает предотвратить ошибки


В дополнение к удобству, которое оно предоставляет, автоупаковка/распаковка может также помочь избежать ошибок. Например, рассмотрим следующую программу:

// Ошибка, порожденная "ручной" распаковкой.
class UnboxingError {
public static void main(String args[]) {
Integer iOb = 1000; // автоупаковка значения 1000
int i = iOb.byteValue () ;
// ручная распаковка, как byte ! ! !
System.out.println(i); // не отображает 1000 !
}
}

Эта программа отображает не ожидаемое значения 1000, а -24! Причина состоит в том, что значение внутри iOb распаковано вручную вызовом byteVal (), что привело к усечению значения 1000, хранящегося в iOb. В результате получилось "мусорное" значение -24, которое было присвоено i. Автораспаковка предотвращает этот тип ошибок, поскольку значение iOb всегда будет автоматически распаковываться в значение, совместимое с int.

В общем, поскольку автоупаковка всегда создает правильный объект, а автораспаковка всегда порождает правильное значение, то нет опасности получить неверное значение или неверный объект. В тех редких случаях, когда вам нужно получить значение типа, отличающегося от того, который генерируется автоматически, вы можете вручную упаковывать и распаковывать значения. Конечно, выгоды от автоупаковки/автораспаковки в этом случае теряются. В принципе, новый код должен использовать автоупаковку/автораспаковку. Это — правильный способ написания нового кода на Java.