FindBugs mir eine Warnung über die folgende Zeile geben, wo invoiceNumber
ist ein Integer
Objekt:Boxed Wert unboxed Umgepackte dann
text.append(String.format("%010d-", (invoiceNumber == null) ? 0 : invoiceNumber));
Die Warnung wird: „Boxed Wert wird unboxed und dann sofort Umgepackte“
Jetzt denke ich, ich verstehe (un) Boxen, aber ich kann nicht sehen, wie Sie das gleiche tun würden, ohne die Warnung zu bekommen?
Ich habe festgestellt, dass ich die Warnung loswerden stattdessen den folgenden Code verwenden, aber dies scheint mehr langatmig:
int invNo = (invoiceNumber == null) ? 0 : invoiceNumber;
text.append(String.format("%010d-", invNo));
Kann mir jemand zeigen, was das ist ‚richtige‘ Art und Weise das zu tun über?
BTW, ich habe mir die verwandten Fragen angeschaut und ich verstehe, was mit ihnen los ist, aber das scheint nicht zu denen von denen zu passen.
Vielleicht 'text.append (String.format ("% 010d- ", (invoiceNumber == null)? Ineger.valueOf (0): invoiceNumber));' wird tun. – Eran
Ja, das wird die Warnung los, aber warum ist das "besser". Es baut ein Integer-Objekt (was teuer sein sollte), sollte es aber nicht müssen. – DuncanKinnear
Bei 0 (oder einer Ganzzahl von -128 bis 127) wird keine neue Integer-Instanz konstruiert, da die Instanz bereits in IntegerCache verfügbar ist. Und Sie speichern die Unboxing- und Boxing-Vorgänge, sodass Sie möglicherweise eine leichte Leistungsverbesserung erzielen. – Eran