FindBugs дает мне предупреждение о следующей строке, где invoiceNumber
является Integer
объектом:штучного значения распакованного затем reboxed
text.append(String.format("%010d-", (invoiceNumber == null) ? 0 : invoiceNumber));
Предупреждения: «штучное значение распакованное, а затем сразу же reboxed»
Теперь я думаю, что понимаю (не) бокс, но я не вижу, как вы будете делать то же самое, не получая предупреждение?
Я обнаружил, что я могу избавиться от предупреждения, используя следующий код вместо этого, но это, кажется, более многословно:
int invNo = (invoiceNumber == null) ? 0 : invoiceNumber;
text.append(String.format("%010d-", invNo));
Может кто-то показать мне, что такое «правильный» способ сделать выше?
BTW, я рассмотрел связанные вопросы, и я понимаю, что с ними происходит, но это, похоже, не соответствует ни одному из них.
Возможно, 'text.append (String.format ("% 010d- ", (invoiceNumber == null)? Ineger.valueOf (0): invoiceNumber));' будет делать. – Eran
Да, это избавляет от предупреждения, но почему это «лучше». Он создает объект Integer (который должен быть дорогим), но ему не нужно. – DuncanKinnear
В случае 0 (или любого целого числа от -128 до 127) он не создает какой-либо новый экземпляр Integer, так как экземпляр уже доступен в IntegerCache. И вы сохраняете операции распаковки и бокса, так что это может дать вам небольшое улучшение производительности. – Eran