EMZETT.
Login

short

Kurz: Ein primitiver Ganzzahltyp mit 16 Bit — Wertebereich von -32.768 bis 32.767, größer als byte, kleiner als der Standard-int.

Genauer: In der Praxis kaum genutzt, da int (32 Bit) auf modernen Systemen keinen relevanten Performance- oder Speichervorteil gegenüber short verliert, aber deutlich seltener zu Überlauf-Problemen führt. Am ehesten relevant bei sehr speicherkritischen Datenstrukturen mit vielen Werten.

Im Detail

short klein = 32000;
short zuGross = 40000; // Compilerfehler: konstanter Ausdruck außerhalb des Wertebereichs
 
int normal = klein + 1; // Rechenergebnis wird automatisch zu int
short zurueck = (short) normal; // explizites Casting nötig, um wieder short zu werden

Ein Detail, das oft überrascht: sobald man mit short-Werten rechnet, wandelt Java das Ergebnis automatisch in int um (“Integer Promotion”) — deshalb braucht die Rückzuweisung in eine short-Variable immer einen expliziten Cast. short belegt zwar nur 16 statt 32 Bit, doch moderne CPUs verarbeiten int-Werte oft genauso schnell oder schneller, weil sie intern ohnehin in 32-Bit- oder 64-Bit-Registern rechnen — der Speichervorteil zahlt sich also nur bei sehr großen Arrays mit Millionen Elementen wirklich aus (z. B. Audio-Sample-Daten, die klassischerweise als 16-Bit-Werte vorliegen).

Zusammen mit byte, int und long bildet short die Familie der ganzzahligen primitiven Typen in Java, die sich ausschließlich in ihrem Wertebereich und Speicherbedarf unterscheiden:

TypBitsWertebereich
byte8-128 bis 127
short16-32.768 bis 32.767
int32ca. -2,1 Mrd. bis 2,1 Mrd.
long64ca. ±9,2 Trillionen

Warum short in modernen APIs selten vorkommt

Die meisten Standard-Java-APIs (Collections, Streams, die meisten Bibliotheken) arbeiten intern konsequent mit int, selbst wenn short semantisch ausreichen würde — das vermeidet ständiges Hin- und Her-Casten an API-Grenzen und die damit verbundene Fehleranfälligkeit. In der Praxis begegnet short fast ausschließlich beim Arbeiten mit Binärformaten oder Protokollen, die explizit 16-Bit-Werte vorschreiben (Audio-Sample-Daten, bestimmte Netzwerkprotokoll-Header, Interoperabilität mit C-Bibliotheken über JNI), nicht in gewöhnlichem Anwendungscode.

Vorzeichenbehaftet, kein unsigned short

Anders als manche andere Sprachen kennt Java kein unsigned short (nur positive Werte, dafür doppelter positiver Bereich) — jeder ganzzahlige Java-Typ ist stets vorzeichenbehaftet. Wer einen reinen 0-bis-65535-Wertebereich benötigt (wie ein “unsigned short” ihn böte), muss entweder den nächstgrößeren Typ int verwenden oder mit Bitmasken-Tricks arbeiten, um den negativen Bereich softwareseitig zu ignorieren.

Siehe auch: byte, long, Type Casting