Il mio obiettivo è ottimizzare il mio codice applicazione. Il mio codice è simile al seguente:richiama il nuovo costruttore Integer (int) inefficiente; utilizzare Integer.valueOf (int) invece
int a = 10;
Map<String , Integer> myMap = new TreeMap<>();
myMap.put("first" , new Integer(a)); //[FindBugs] Method com.abc.xyz.Test.main(String[]) invokes inefficient new Integer(int) constructor; use Integer.valueOf(int) instead
Quando ho fatto l'analisi statica da Findbugs in NetBeans, si vede che c'è un avviso/bug come "metodo richiama inefficiente nuovo (int) costruttore Integer; utilizzare Integer.valueOf (int) invece ".
so la differenza tra new Integer (int) vs Integer.valueOf (int).
Uno crea un oggetto aggiuntivo e l'altro no. Anche uno non memorizza nella cache e le altre cache.
Così ho modificato il mio codice come questo ...
m.put("first" , Integer.valueOf(a)); // Unnecessary boxing to Integer
ma ancora una volta che dà anche avvertimento "boxe Inutile Integer" (dal redattore non per findbugs).
Così, ho cambiato di nuovo come in questo modo ....
m.put("first" , a); //No warning at all...
che dà finalmente nessun avvertimento a tutti.
La mia domanda:
1.) Questa link suggeriscono che internamente (dal compilatore) m.put ("prima", a); sta convertendo in m.put ("first", Integer.valueOf (a));
(In questo esempio, c'è una List-ArrayList e qui Map-TreeMap ... FYI). allora perché l'editor dà avvertimento? E cosa dovrei fare? qual è il modo ottimizzato?
2.) Se invece di Mappa, se non v'è alcuna struttura di dati come HashTable allora ???
3.) Perché l'editor dà Box non necessario all'intero.
4.) Perché m.put ("primo", a) funziona? Poiché sto passando la variabile primitiva e la mappa put() accetta solo Oggetto. Quindi è a causa di boxing automatico?
Sì, è a causa di boxe automatico. –
OK.thanks ... allora qual è il modo migliore per l'ottimizzazione? l'ultimo?? –
Non penso che tu possa ottimizzarlo, il box automatico fa lo stesso lavoro per te quindi non hai bisogno di fare esplicitamente 'valueOf (a)'. –