Я думаю, что когда я прочитал статью Джошуа Блоха Эффективная Java, у меня создалось впечатление, что по соображениям эффективности следует избегать использования автобоксинга. Но я получаю противоречивую информацию, что могу доверять компилятору оптимальным образом использовать valueOf()
и intValue()
, когда я делаю неявное преобразование.Автобуксирование и математические выражения Java?
Так этот код я написал ниже
Integer capacity = 50103;
Integer inventory = 40122;
int available = capacity - inventory;
Теоретически будет компилировать в тот же байт-код как код ниже.
Integer capacity = Integer.valueOf(50103);
Integer inventory = Integer.valueOf(40122);
int available = capacity.intValue() – inventory.intValue();
Это правда, что касается Java 7 и 8? Есть ли какая-либо причина явно вставить/удалить или оптимизировать компилятор для этого сейчас?
Компилятор не «оптимизирует» это. Это всегда делает то, что показывает ваш второй пример. «Явно box/unbox» ничего не делает, он просто показывает, что происходит под капотом. – markspace