To się nazywa autoboxing.
Należy pamiętać, że nadal będzie tworzyć prawdziwe obiekty Short
automatycznie, a te zajmują 16 bajtów na stercie, tak samo jak obiekt Integer. Tylko natywne wartości short
zajmują tylko 2 bajty (ale nie można ich umieścić w java.util.collections
).
W wielu sytuacjach
list.put((short) 12345);
list.put((short) 12345);
będzie w rzeczywistości nawet tworzyć dwa takich obiektów, to jest 32 bajtów plus pamięć zajmowaną przez obiekt listy. Wskaźniki przechowywane na liście zajmują już po 4-8 bajtów.
Jeśli masz tylko kilka przypadków, które są w porządku. Jeśli masz kilka milionów, może to źle wpłynąć na wydajność z powodu zarządzania pamięcią i użytkowania. Z surowymi spodenkami zwykle możesz przejść 10 razy, zanim zacznie ci brakować wolnej pamięci.
+1 za ostrzeżenie o NPE. Aby było to wyraźne: 'list.add (null); short s = list.get (0); 'Uzyskanie zostanie w zasadzie skompilowane do' ((Short) list.get (0)). shortValue() ', które otrzyma' null', przesyła je do 'Short' i wyrzuć NPE na 'shortValue()'. – yshavit