public static Integer valueOf(int i)
Zwraca instancję całkowitą reprezentującą określoną wartość int. Jeśli nowa instancja Integer nie jest wymagana, ta metoda powinna być używana jako na ogół w stosunku do konstruktora Integer (int), jako ta metoda może przynieść znacznie lepszą wydajność w zakresie czasu i przestrzeni, poprzez buforowanie często żądanych wartości.
Parametry:
i
- wartość int.
Powraca:
a
Integer instance reprezentujący i
.
od:
1,5
odnoszą http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Integer.html#valueOf%28int%29
Ten wariant valueOf dodano w JDK 5 do Byte, Short, Integer i Long (to już istniała w błahej sprawy Boolean od JDK 1.4). Wszystkie te są, oczywiście, obiektami niezmiennymi w Javie.Kiedyś, jeśli potrzebujesz obiektu Integer z int, możesz skonstruować nową liczbę całkowitą. Ale w JDK 5+, powinieneś naprawdę użyć valueOf, ponieważ Integer teraz buforuje obiekty Integer między -128 a 127 i może przekazać ci ten sam dokładny obiekt Integer (0) za każdym razem zamiast marnować konstrukcję obiektu na zupełnie nową identyczną liczbę całkowitą obiekt.
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);
}
odnoszą Why YOU should use Integer.valueOf(int)
EDIT
autoboxing i utworzenie obiektu:
Ważnym punktem musimy wziąć pod uwagę to, że autoboxing nie zmniejsza tworzenie obiektów, ale zmniejsza kod złożoność. Dobrą zasadą jest użycie typów pierwotnych, w których obiekty nie są potrzebne, z dwóch powodów:
Rodzaje prymitywów nie będą wolniejsze niż ich odpowiednie typy opakowań i mogą być znacznie szybsze. Może wystąpić pewne nieoczekiwane zachowanie obejmujące := (porównaj odniesienia) i .equals() (porównaj wartości).
Zwykle, gdy typy pierwotne są podzielone na typy opakowań, JVM przydziela pamięć i tworzy nowy obiekt. Ale w niektórych szczególnych przypadkach JVM wykorzystuje ten sam obiekt.
Poniższa lista prymitywów przechowywane jako niezmiennych obiektów:
wartości logiczne prawdziwych i fałszywych
Wszystko bajt wartości
krótkie wartości od -128 do 127
wartości int od -128 do 127
znak w zakres \ u0000 do \ u007F
patrz http://today.java.net/pub/a/today/2005/03/24/autoboxing.html#performance_issue
W rzeczywistości nie ma znaczenia, czy robisz "myMethod (Integer.valueOf (123))" lub "myMethod (123)", ponieważ autoboxing użyje dla ciebie 'Integer.valueOf()'. osądź sam, który z nich jest bardziej czytelny. (zakładając, że "myMethod' bierze" Integer') – soulcheck