EMZETT.
Login

long

Kurz: Ein ganzzahliger Datentyp mit größerem Wertebereich als der Standard-Integer (meist 64 statt 32 Bit) — nötig, wenn Werte den normalen Integer-Bereich sprengen können.

Genauer: Typische Anwendungsfälle sind Zeitstempel (Millisekunden seit einem festen Referenzpunkt), sehr große Zähler oder eindeutige IDs, die im Laufe der Zeit über den normalen 32-Bit-Bereich hinauswachsen. In vielen Sprachen muss ein long-Literal explizit gekennzeichnet werden (z. B. mit einem angehängten L), sonst interpretiert der Compiler die Zahl standardmäßig als kleineren Integer-Typ.

Im Detail

Der Grund für die feste Größe: Ein ganzzahliger Typ mit n Bits kann exakt 2^n unterschiedliche Werte darstellen. Ein 32-Bit-Integer deckt also ungefähr −2,1 bis +2,1 Milliarden ab — genug für die allermeisten Alltagszahlen, aber zu wenig z. B. für einen Zeitstempel in Millisekunden (der schon nach wenigen Jahrzehnten diesen Bereich überschreitet) oder für sehr große Datenbank-IDs.

int normal = 2147483647;        // Maximum für einen 32-Bit int
long gross = 9223372036854775807L;  // Maximum für einen 64-Bit long

Wird eine Rechnung mit normalen Integers durchgeführt, deren Ergebnis den Wertebereich überschreitet, kommt es zu einem Integer-Overflow: Der Wert “läuft über” und springt (je nach Sprache) auf den negativsten möglichen Wert zurück, statt einen Fehler zu werfen — ein klassischer, schwer zu findender Bug, weil das Programm einfach mit einer plötzlich falschen (oft negativen) Zahl weiterläuft, ohne offensichtlich abzustürzen. long verschiebt diese Grenze weit genug nach oben, dass sie in der Praxis für fast alle realistischen Zahlen nicht mehr relevant wird.

Der Nachteil eines long gegenüber einem normalen Integer ist doppelter Speicherverbrauch pro Wert (8 statt 4 Byte) — bei einzelnen Variablen vernachlässigbar, bei Millionen von gespeicherten Werten (z. B. in einem großen Array oder einer Datenbanktabelle) kann sich das durchaus summieren. Faustregel: long nur dort verwenden, wo der Wertebereich eines normalen Integers wirklich zu knapp werden könnte, nicht vorsorglich überall.

Siehe auch: byte, short