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 werdenEin 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:
| Typ | Bits | Wertebereich |
|---|---|---|
byte | 8 | -128 bis 127 |
short | 16 | -32.768 bis 32.767 |
int | 32 | ca. -2,1 Mrd. bis 2,1 Mrd. |
long | 64 | ca. ±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