FindBugs mi sta dando un avvertimento circa la seguente riga, dove invoiceNumber
è un oggetto Integer
:valore Boxed unboxed poi nuova confezione
text.append(String.format("%010d-", (invoiceNumber == null) ? 0 : invoiceNumber));
L'avvertimento è: "Valore Boxed è unboxed e poi subito nuova confezione"
Ora penso di capire (dis) la boxe, ma non riesco a vedere come faresti la stessa cosa senza ricevere l'avviso?
ho trovato che posso liberarmi di avvertimento utilizzando il seguente codice, invece, ma questo sembra più lunga-winded:
int invNo = (invoiceNumber == null) ? 0 : invoiceNumber;
text.append(String.format("%010d-", invNo));
Qualcuno mi può mostrare qual è il modo 'corretto' per fare il sopra?
BTW, ho esaminato le domande correlate e ho capito cosa stava succedendo con loro, ma questo non sembra corrispondere a nessuno di questi.
Forse 'text.append (String.format ("% 010d- ", (invoiceNumber == null)? Ineger.valueOf (0): invoiceNumber)); – Eran
Sì, questo elimina l'avviso, ma perché è "migliore". Sta costruendo un oggetto Integer (che dovrebbe essere costoso), ma non dovrebbe essere necessario. – DuncanKinnear
Nel caso di 0 (o qualsiasi numero intero compreso tra -128 e 127), non sta costruendo alcuna nuova istanza di Integer, poiché l'istanza è già disponibile in IntegerCache. E stai salvando le operazioni di unboxing e boxing, quindi potrebbe darti un leggero miglioramento delle prestazioni. – Eran