FindBugs выдает мне предупреждение о следующей строке, где invoiceNumber
— это объект Integer
:
text.append(String.format("%010d-", (invoiceNumber == null) ? 0 : invoiceNumber));
Предупреждение: «Упакованное значение распаковывается, а затем сразу же повторно упаковывается».
Теперь я думаю, что понимаю (не)бокс, но я не понимаю, как вы могли бы сделать то же самое, не получив предупреждения?
Я обнаружил, что могу избавиться от предупреждения, используя вместо этого следующий код, но он кажется более многословным:
int invNo = (invoiceNumber == null) ? 0 : invoiceNumber;
text.append(String.format("%010d-", invNo));
Может ли кто-нибудь показать мне, что такое «правильный» способ сделать вышеперечисленное?
Кстати, я просмотрел связанные вопросы и понимаю, что с ними происходит, но, похоже, это не соответствует ни одному из них.
text.append(String.format("%010d-", (invoiceNumber == null) ? Ineger.valueOf(0) : invoiceNumber));
подойдет. - person Eran   schedule 17.08.2015Integer
в своем исходном коде, а также в своем исправлении сint invNo = (invoiceNumber == null) ? 0 : invoiceNumber;
(хотя предупреждение FindBugs исчезает), но с помощью решения @Eran вы не будете создавать новый Integer, а повторно используете существующий. Что ж, хотя ответ Эрана правильный (за него проголосовали), в целом вы можете просто проигнорировать это предупреждение. Очень маловероятно, что это на самом деле повредит производительности вашего приложения. Созданный дополнительныйInteger
очень недолговечен. - person Tagir Valeev   schedule 17.08.2015