public static Integer valueOf(int i)
restituisce un'istanza numero intero che rappresenta il valore int specificato. Se non è richiesta una nuova istanza Integer, questo metodo deve essere utilizzato in genere come prefisso Integer (int), come è probabile che questo metodo produca prestazioni e tempo significativamente migliori memorizzando nella cache i valori richiesti di frequente.
Parametri:
i
- un valore int.
Resi:
a
Istanza intera che rappresenta i
.
dal:
1,5
riferiscono http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Integer.html#valueOf%28int%29
Questa variante di valueOf è stata aggiunta nel JDK 5 per Byte, Corto, Integer, e Long (esisteva già nel caso banale booleano dal JDK 1.4). Tutti questi sono, ovviamente, oggetti immutabili in Java.Usato per essere quello che se avessi bisogno di un oggetto intero da un int, dovresti costruire un nuovo intero. Ma in JDK 5+, dovresti davvero usare valueOf perché Integer ora memorizza nella cache oggetti interi tra -128 e 127 e può restituirti lo stesso oggetto intero (0) ogni volta invece di sprecare una costruzione di oggetti su un intero identico completamente nuovo oggetto.
private static class IntegerCache {
private IntegerCache(){}
static final Integer cache[] = new Integer[-(-128) + 127 + 1];
static {
for(int i = 0; i < cache.length; i++)
cache[i] = new Integer(i - 128);
}
}
public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}
riferiscono Why YOU should use Integer.valueOf(int)
EDIT
autoboxing e creazione dell'oggetto:
Il punto importante considerare è che autoboxing non riduce creazione dell'oggetto, ma riduce codice complessità. Una buona regola empirica consiste nell'utilizzare tipi primitivi dove non c'è bisogno di oggetti, per due ragioni:
I tipi primitivi non saranno più lenti dei loro corrispondenti tipi di wrapper e potrebbero essere molto più veloci. Ci può essere un comportamento inaspettato che coinvolge == (confronta i riferimenti) e .equals() (confronta i valori).
Normalmente, quando i tipi primitivi sono racchiusi nei tipi di wrapper, la JVM alloca la memoria e crea un nuovo oggetto. Ma per alcuni casi speciali, la JVM riutilizza lo stesso oggetto.
Quello che segue è l'elenco dei primitivi memorizzato come oggetti immutabili:
valori booleani true e false
Tutti byte Valori
valori brevi tra -128 e 127
valori int tra -128 e 127
char nell'intervallo \ u0000 a \ u007F
riferiscono http://today.java.net/pub/a/today/2005/03/24/autoboxing.html#performance_issue
in realtà non importa se si esegue 'myMethod (Integer.valueOf (123))' o 'myMethod (123)' come autoboxing userà 'Integer.valueOf()' per te. giudicate voi stessi quale è più leggibile. (supponendo che 'myMethod' prenda' Intero') – soulcheck