Java long Datentyp Leitfaden: MAX/MIN, Literale mit L, Typumwandlung und Überlauf‑Sicherheit

目次

1. Was Sie in diesem Artikel lernen werden (Fazit zuerst)

In Java ist long ein primitiver Typ zur sicheren Handhabung großer Ganzzahlen.
Allerdings gibt es ein paar häufige Stolpersteine für Einsteiger. In diesem Artikel organisieren wir, was Menschen, die nach java long suchen, höchstwahrscheinlich jetzt wissen wollen, und erklären es Schritt für Schritt, sodass Sie es in einer klaren, logischen Reihenfolge verstehen können.

1.1 Schnell die Rolle von long verstehen („Wofür wird es verwendet?“ wird klar)

long ist ein 64‑Bit vorzeichenbehafteter Integer, sodass er viel größere Zahlen als int verarbeiten kann.
Deshalb wird er häufig in folgenden Szenarien eingesetzt:

  • IDs (z. B. Datenbank‑Sequenzen, die sehr groß werden können)
  • Zeit (Millisekunden in UNIX‑Zeit, Log‑Zeitstempel usw.)
  • Geld (wenn Sie Dezimalstellen vermeiden und Beträge als Ganzzahlen in der kleinsten Einheit verwalten wollen)

Mit anderen Worten: Wenn Sie einen Integer haben, der groß werden kann, wird long extrem wichtig.

1.2 Können Sie den Wertebereich von long (Max/Min) genau erklären

„Wie groß kann ein long werden?“ ist eine Frage, die auch in der Praxis häufig auftaucht.
In diesem Artikel verwenden wir Long.MAX_VALUE und Long.MIN_VALUE, um wie man den Bereich sicher versteht und handhabt zu erläutern.

Wir klären außerdem häufige Verwirrungen wie: „Warum gibt es einen Fehler, obwohl long Werte größer als int halten sollte?“

1.3 Verstehen, warum numerische Literale ein „L“ benötigen (damit es endlich Sinn ergibt)

Dies ist der am häufigsten gesuchte und verwirrendste Teil von long:

  • Was ist das L in 123L?
  • Warum verursacht die Zuweisung von 3000000000 einen Fehler?
  • Wann sollte man L hinzufügen?

Ausgehend von der Grundannahme, dass Java Ganzzahl‑Literale standardmäßig als int behandelt, erklären wir sorgfältig, warum L notwendig wird.
Sobald das klar ist, wird Ihr Verständnis von long deutlich stabiler.

1.4 Lernen, wie Überlauf funktioniert (und wie man ihn verhindert)

long kann große Zahlen verarbeiten, ist aber nicht unendlich.
Wenn Sie über den Maximalwert hinaus rechnen, können Ergebnisse entstehen, die „falsch“ aussehen (das ist ein Überlauf).

In diesem Artikel behandeln wir:

  • Häufige Beispiele, bei denen ein Überlauf auftritt
  • Warum das passiert (ohne zu sehr ins Detail zu gehen)
  • Praktische Gegenmaßnahmen (wie man sicher berechnet)

… alles erklärt auf anfängerfreundliche Weise.

1.5 Den Unterschied zwischen long und Long verstehen (Primitive vs Wrapper)

Java kennt sowohl long als auch Long.
Sie sehen ähnlich aus, was leicht zu Verwechslungen führt, aber sie erfüllen unterschiedliche Zwecke.

  • long : primitiver Typ (schnell, kann nicht null sein)
  • Long : Klasse (hat Methoden, kann null enthalten)

Wir strukturieren diesen Unterschied so, dass Sie ihn als echte „Entscheidungsgrundlage“ verstehen, nicht nur als etwas zum Auswendiglernen.

1.6 Ihr Ziel nach dem Lesen dieses Artikels

Am Ende dieses Artikels sollten Sie in der Lage sein:

  • Zu entscheiden, wann long zu verwenden ist und wann int ausreicht
  • Zu erklären, was das L bedeutet, und zugehörige Fehler selbst zu beheben
  • Long.MAX_VALUE und ähnliche Konstanten zu nutzen, um Grenzen sicher zu handhaben
  • Überläufe und Typumwandlungsfallen in Zwischenschritten zu vermeiden
  • long vs. Long je nach Situation angemessen einzusetzen

Sobald Sie das erreicht haben, haben Sie das „Ich bin mir bei java long nicht sicher“-Gefühl hinter sich und können Code mit Zuversicht schreiben.

2. Was ist der long‑Typ von Java? (Grundlegende Definition)

Ab hier festigen wir die Grundlagen des long‑Typs.
Ziel ist es, über das bloße „es ist ein Typ für große Zahlen“ hinauszugehen und ihn korrekt als Sprachspezifikation zu verstehen.

2.1 long ist ein „64‑Bit vorzeichenbehafteter Integer‑Typ“

In Java ist long ein 64‑Bit (8‑Byte) vorzeichenbehafteter Integer‑Typ.
„Vorzeichenbehaftet“ bedeutet, dass er negative Werte darstellen kann.

Intern hat er folgende Eigenschaften:

  • Bit‑Breite: 64 Bits
  • Unterstützte Werte: positive Zahlen, Null und negative Zahlen
  • Keine Dezimalstellen (nur Ganzzahlen)

Da er 64 Bits breit ist, kann long viel größere Ganzzahlen verarbeiten als int.

long a = 10;
long b = -500;
long c = 1234567890123L;

All diese Zuweisungen funktionieren einwandfrei.

2.2 Unterschiede zu int, short und byte

Java hat mehrere Ganzzahltypen neben long.
Lassen Sie uns hier einmal das „Größen‑Gefühl“ ordnen.

TypeBitsTypical Use
byte8-bitBinary data, low-level processing
short16-bitSpecial cases (rarely used)
int32-bitStandard for typical integer calculations
long64-bitLarge integers, IDs, time, etc.

In der Praxis gilt grob gesagt:

  • Normale Berechnungenint
  • Ganzzahlen, die groß werden könnenlong

So wählt man üblicherweise.

2.3 Warum nicht von Anfang an überall long verwenden?

Eine häufige Anfängerfrage lautet etwa:

„Wenn long größere Zahlen halten kann, warum nicht überall long benutzen?“

Technisch ist das möglich, aber es ist nicht immer die beste Wahl.

Warum das so ist:

  • int hat oft geringere Rechenkosten (die CPU kann ihn leichter verarbeiten)
  • Bei Arrays und großen Datenmengen kann der Speicherverbrauch variieren
  • Viele Java‑APIs gehen von int als Standard‑Annahme aus

In der Praxis bedeutet das:

  • Wenn die Größe eindeutig klein ist → int verwenden
  • Wenn sie künftig wachsen oder überlaufen könnte → long verwenden

Das ist in der Regel die realistischste Entscheidung.

2.4 Häufige Anwendungsfälle für long in der Praxis

long wird häufig in folgenden Situationen verwendet:

2.4.1 IDs und fortlaufende Nummern

Primärschlüssel in Datenbanken oder eindeutige IDs innerhalb eines Systems können bei langfristigem Betrieb schließlich die Obergrenze von int (etwa 2,1 Milliarden) überschreiten.

long userId = 10000000001L;

In solchen Fällen ist long fast unverzichtbar.

2.4.2 Zeit und Datum (Zeitstempel)

In Java wird Zeit oft als „Ganzzahl in Millisekunden“ behandelt.

long now = System.currentTimeMillis();

UNIX‑Zeit in Millisekunden wird zu einer sehr großen Zahl, sodass int definitiv nicht ausreicht.

2.4.3 Geld (Verwaltung von Beträgen in der kleinsten Einheit)

Wird Geld mit double verarbeitet, können Rundungsfehler auftreten.
In realen Systemen ist es daher üblich, Beträge als Ganzzahlen in der „kleinsten Einheit“ zu verwalten.

// Manage in units of 1 yen
long price = 1500;

Das ist ein weiterer klassischer Anwendungsfall für long.

2.5 long ist „groß“, aber nicht „unendlich“

Ein wichtiger Hinweis:

  • long kann große Zahlen halten
  • Aber es ist nicht unendlich

Geht eine Berechnung über die obere oder untere Grenze hinaus, tritt ein Überlauf auf.
Wir behandeln das später ausführlich.

3. Das Zahlenintervall von long (Max/Min) korrekt verstehen

Beim Arbeiten mit long ist ein unverzichtbarer Punkt das „numerische Intervall“.
Wenn man es vage verwendet, kann das zu unerwarteten Bugs und Rechenfehlern führen.

3.1 Wo kann man die maximalen und minimalen Werte von long nachschlagen?

Java bietet eine sichere Möglichkeit, das Intervall von long als Konstanten zu erhalten.

long max = Long.MAX_VALUE;
long min = Long.MIN_VALUE;
  • Long.MAX_VALUE : der maximal darstellbare Wert von long
  • Long.MIN_VALUE : der minimal darstellbare Wert von long

Man muss sich diese Zahlen nicht auswendig merken.
Wichtig ist, dass man sie im Code abrufen kann.

3.2 Das tatsächliche Zahlenintervall von long

Zur Orientierung: Das Intervall von long in Zahlen lautet:

  • Max: 9 223 372 036 854 775 807
  • Min: ‑9 223 372 036 854 775 808

Es ist eine riesige Ziffernmenge und nicht sehr intuitiv, aber es reicht, sich Folgendes zu merken:

  • Es kann bis zu etwa 9 Quintillionen verarbeiten
  • Es liegt auf einer völlig anderen Größenordnung als int (etwa 2,1 Milliarden)

Dieses mentale Modell ist in der Regel ausreichend.

3.3 Warum sind Max‑ und Min‑Werte asymmetrisch?

Schaut man genau hin, wirkt das Intervall von long etwas merkwürdig:

  • Max: +9 223 372 036 854 775 807
  • Min: ‑9 223 372 036 854 775 808

Man fragt sich vielleicht: „Warum ist die negative Seite um 1 größer?“

Das liegt daran, dass Java‑Ganzzahlen im Zweierkomplement gespeichert werden.
Man muss nicht zu tief graben – einfach merken:

Durch das Design gibt es einen zusätzlichen Wert auf der negativen Seite.

Dieses Verständnis reicht aus.

3.4 Vergleich von long mit int

Jetzt lassen Sie uns das konkreter mit int vergleichen.

int intMax = Integer.MAX_VALUE;   // 2,147,483,647
long longMax = Long.MAX_VALUE;    // 9,223,372,036,854,775,807

Das Maximum von int beträgt etwa 2,1 Milliarden.
Im Gegensatz dazu hat long einen Bereich, der Millionen Mal größer ist.

Wegen dieses Unterschieds überschreiten Werte wie:

  • Zählungen
  • Zeit (Millisekunden)
  • Kumulative Summen
  • Sequenzielle IDs

viel wahrscheinlicher, was int halten kann.

3.5 Vorsicht beim Umgang mit Grenzwerten

Sie müssen besonders vorsichtig sein in der Nähe der maximalen und minimalen Werte von long.

long value = Long.MAX_VALUE;
value = value + 1;
System.out.println(value);

Wenn Sie diesen Code ausführen, tritt kein Fehler auf.
Allerdings wird der ausgegebene Wert nicht das sein, was Sie erwarten.

Dieses Phänomen wird Überlauf genannt.

  • Sobald der Wert die Obergrenze überschreitet, wickelt er sich in den negativen Bereich um
  • Java wirft keinen Fehler automatisch für Überlauf

Wenn Sie dieses Verhalten nicht kennen, ist es leicht, zu denken: „Warum ist es plötzlich negativ geworden?“

3.6 Merken Sie sich den Bereich nicht auswendig – „Schützen“ Sie ihn

Die entscheidende Einstellung ist:

  • Merken Sie sich die rohen Zahlen nicht auswendig
  • Verwenden Sie Long.MAX_VALUE / Long.MIN_VALUE
  • Seien Sie vorsichtig mit Berechnungen, die Grenzen überschreiten könnten

Nur diese Einstellung beizubehalten, reduziert long-bezogene Probleme erheblich.

4. Warum der „L“-Suffix für numerische Literale erforderlich ist (Der verwirrendste Punkt)

Für Menschen, die nach java long suchen, ist das verwirrendste Thema oft das „L“, das an numerische Literale angehängt wird.
Sobald Sie das korrekt verstehen, verschwinden viele long-bezogene Fehler und Zweifel auf einmal.

4.1 In Java werden Integer-Literale standardmäßig als int behandelt

Zuerst gibt es eine entscheidende Voraussetzung.
In Java werden Integer-Literale standardmäßig als int behandelt.

int a = 100;

Das ist offensichtlich in Ordnung.
Aber schauen Sie sich den folgenden Code an:

long b = 3000000000;

Auf den ersten Blick sieht es okay aus, aber das verursacht einen Kompilierungsfehler.

Der Grund ist einfach:

  • 3000000000 überschreitet den Bereich von int
  • Java versucht zuerst, es als ein int zu interpretieren
  • Zu diesem Zeitpunkt wird es als „zu groß“ bewertet

Deshalb tritt der Fehler auf.

4.2 Was ändert sich, wenn Sie „L“ hinzufügen?

Dieser Fehler wird behoben, indem Sie den Code so umschreiben:

long b = 3000000000L;

Durch das Hinzufügen von L am Ende der Zahl sagen Sie Java klar:

  • „Dieser Wert ist ein long-Literal.“
  • „Behandeln Sie es von Anfang an als long, nicht als int.“

Kurzum, L ist ein Marker, der den Typ explizit angibt.

4.3 Wann ist „L“ erforderlich?

Sie benötigen L in den folgenden Fällen:

4.3.1 Beim Schreiben von Zahlen, die den int-Bereich überschreiten

long x = 2147483648L; // exceeds int max

In diesem Fall ist L zwingend erforderlich.

4.3.2 Wenn Sie explizit ein long angeben möchten

Auch wenn der Wert im int-Bereich liegt, möchten Sie möglicherweise klar angeben, dass er als ein long behandelt werden soll.

long count = 100L;

Das ist nicht erforderlich, aber es kann die Lesbarkeit verbessern.

4.4 Ist Kleinbuchstabe „l“ erlaubt?

Aus syntaktischer Sicht ist das gültig:

long y = 100l;

Allerdings wird Kleinbuchstabe l nicht empfohlen.

Die Gründe sind einfach:

  • Es ist leicht, es mit der Ziffer „1“ zu verwechseln
  • Es kann bei Code-Reviews falsch gelesen werden

Deshalb lautet die gängige Regel: verwenden Sie immer Großbuchstabe L.

4.5 Hexadezimal, Binär, Unterstriche und L

long-Literale können auch in anderen Basen als Dezimal geschrieben werden.

long hex = 0x7FFF_FFFF_FFFF_FFFFL;
long bin = 0b1010_1010_1010L;

Wichtige Punkte:

  • _ (Unterstrich) kann als Ziffern-Trennzeichen verwendet werden
  • L wird ganz am Ende platziert
  • Das verbessert die Lesbarkeit bei großen Zahlen erheblich

4.6 „L“ spielt auch in Ausdrücken eine Rolle

Der folgende Code ist eine klassische Anfängerfalle:

long result = 1000 * 1000 * 1000;

Obwohl es gut aussieht, werden alle Zwischenergebnisse als int berechnet. Das kann während der Berechnung zu Überlauf führen.

Die korrekte Version ist:

long result = 1000L * 1000 * 1000;

Durch das Hinzufügen von L am Anfang, wird der gesamte Ausdruck als long ausgewertet, und ist damit sicher.

4.7 „L“ ist nicht nur zum Vermeiden von Fehlern

Zusammenfassend ist die Rolle von L:

  • Java explizit mitteilen, dass es sich um ein long handelt
  • Zahlen außerhalb des int‑Bereichs sicher verarbeiten
  • Überlauf bei Zwischenergebnissen verhindern
  • Die Absicht für Leser des Codes klar kommunizieren

Betrachte es nicht nur als ein Symbol, sondern als ein wichtiges Werkzeug für das Schreiben von sicherem und lesbarem Code.

5. Grundlegende Operationen mit long (Zuweisung, Berechnung, Casting)

Hier fassen wir die wichtigsten Punkte zu Zuweisung, arithmetischen Operationen und Typumwandlung (Casting) zusammen, die bei der Verwendung von long immer wieder auftreten. Das ist häufig der Punkt, an dem Anfänger sagen: „Ich dachte, es würde funktionieren, aber das Ergebnis ist seltsam“, also gehen wir es sorgfältig durch.

5.1 Grundlegende Zuweisung zu long

Zuweisungen zu long sehen im Allgemeinen so aus:

long a = 10;
long b = 100L;
  • Werte innerhalb des int‑Bereichs → können direkt zugewiesen werden
  • Werte außerhalb des int‑Bereichs → benötigen L

Das folgt unmittelbar aus dem, was wir zuvor behandelt haben.

5.2 Achten Sie auf die „Typförderung“ bei Berechnungen

Java hat eine Regel, bei der der Typ, der in Zwischenergebnissen verwendet wird, automatisch bestimmt wird. Wenn man das nicht versteht, kann das leicht zu subtilen Fehlern führen.

5.2.1 int × int ergibt ein int

Betrachten Sie dieses Beispiel:

long result = 1000 * 1000 * 1000;

Die Verarbeitungsreihenfolge ist:

  1. 1000 * 1000int‑Ergebnis
  2. * 1000 → immer noch int
  3. Dann das Ergebnis zu long zuweisen

Da die Zwischenschritte als int bleiben, kann ein Überlauf auftreten, bevor die Zuweisung erfolgt.

5.2.2 Erzwingen Sie die Berechnung mit long von Anfang an

Um dies zu vermeiden, ist es wichtig, zu Beginn zu long zu promoten.

long result = 1000L * 1000 * 1000;

Damit wird sichergestellt:

  • Der gesamte Ausdruck wird als long ausgewertet
  • Zwischenüberläufe werden vermieden

Dies ist der sicherste Ansatz.

5.3 Implizite Typumwandlung (sichere Fälle)

In Java werden Umwandlungen von einem kleineren zu einem größeren Typ automatisch durchgeführt.

int x = 100;
long y = x;  // OK

Diese Art der Umwandlung ist sicher, weil keine Informationen verloren gehen.

5.4 Fälle, die explizites Casting erfordern (gefährlich)

Auf der anderen Seite erfordern Verengungen wie long → int besondere Vorsicht.

long big = 3000000000L;
int small = (int) big;

Dieser Code kompiliert, aber der Wert wird nicht korrekt erhalten.

  • Die höherwertigen Bits werden abgeschnitten
  • Das Ergebnis wird zu einer völlig anderen Zahl

Mit anderen Worten, Casting ist nicht „sicher“ – es ist „erzwungen“.

5.5 Wie man entscheidet, ob Casting angemessen ist

Eine sichere Herangehensweise beim Casting ist:

  • „Der Wert passt garantiert in int“ → Casting kann akzeptabel sein
  • „Ich weiß nicht, wie er sich in Zukunft ändern könnte“ → nicht casten
  • „Grenzwerte sind möglich“ → als long belassen

Anstatt Werte zurück in kleinere Typen zu zwingen, ist es meist am besten, einen ausreichend großen Typ weiter zu verwenden.

6. Überlaufverhalten und Gegenmaßnahmen

long kann sehr große Zahlen verarbeiten, aber wenn seine Grenzen überschritten werden, sind Probleme unvermeidlich. Hier erklären wir warum Überlauf auftritt und wie man ihn verhindert, auf anfängerfreundliche Weise.

6.1 Überlauf kann selbst bei long auftreten

Zuallererst ist long immer noch ein endlicher Typ. Daher führt Code wie der folgende nicht zu einem Kompilierfehler, sondern liefert zur Laufzeit falsche Werte.

long value = Long.MAX_VALUE;
value = value + 1;
System.out.println(value);

Das Ergebnis ist eine sehr große negative Zahl, obwohl Sie nur 1 zum Maximalwert addiert haben.

Das ist kein Bug – es ist genau so spezifiziert, wie Java sich verhalten soll.

6.2 Warum „wickelt“ sich der Wert um?

Java-Ganzzahlen werden intern mit Zweierkomplement dargestellt.
Aufgrund dieser Darstellung:

  • Der maximale Wert wird überschritten
  • Das höchstwertige Bit wird umgeschaltet
  • Der Wert wickelt sich in den negativen Bereich um

Der entscheidende Punkt ist, dass Java Überläufe nicht automatisch erkennt.
Wenn Sie keine Vorsichtsmaßnahmen treffen, können Sie ungültige Werte weiterhin verwenden, ohne es zu bemerken.

6.3 Typische Situationen, in denen Überläufe zu Problemen werden

Sie müssen in Szenarien wie diesen besonders vorsichtig sein:

  • Kumulative Geldrechnungen
  • Erhöhung von Zählern oder Summen
  • Zeitberechnungen (Hinzufügen von Dauer)
  • Automatische Generierung von IDs oder Sequenznummern

All diese Werte neigen dazu, sich allmählich zu vergrößern, was bedeutet, dass sie bei langfristigem Betrieb schließlich die Obergrenze erreichen können.

6.4 Sichere Berechnung (Mit Math.addExact usw.)

Java stellt Methoden zur Verfügung, die Überläufe explizit erkennen.

long result = Math.addExact(a, b);

Diese Methode verhält sich wie folgt:

  • Wenn das Ergebnis im long-Bereich liegt → Normale Rückgabe
  • Wenn es den Bereich überschreitet → Werfen einer ArithmeticException

Es gibt auch ähnliche Methoden:

  • Math.subtractExact
  • Math.multiplyExact

Für Berechnungen, bei denen Sicherheit entscheidend ist, ermöglichen diese Methoden, abnormale Zustände sofort zu erkennen.

6.5 Vorabprüfung mit if-Anweisungen

Sie können Ausnahmen auch vermeiden, indem Sie Bedingungen im Voraus prüfen.

if (value > Long.MAX_VALUE - add) {
    // Overflow may occur
}

Dieser Ansatz ist nützlich, wenn:

  • Der Code sehr häufig ausgeführt wird
  • Sie Ausnahmen aus Leistungsgründen vermeiden möchten

6.6 Was, wenn long nicht ausreicht?

Wenn:

  • Der Wert den long-Bereich überschreiten könnte
  • Die Genauigkeit extrem wichtig ist (z. B. bei Finanzberechnungen)

dann ist die Fortsetzung der Verwendung von long nicht die richtige Wahl.

In solchen Fällen sollten Sie in Betracht ziehen:

  • BigInteger (Ganzzahlen mit beliebiger Genauigkeit)
  • BigDecimal (Dezimalzahlen mit beliebiger Genauigkeit)

Die Entscheidung, long nicht zu „zwingen“, ist auch Teil eines guten Designs.

7. Der Unterschied zwischen long und Long (Primitive Typ vs. Wrapper-Klasse)

Java hat zwei sehr ähnlich aussehende Typen: long und Long.
Sie dienen klar unterschiedlichen Zwecken, und ein mangelndes Verständnis, wie man sie richtig verwendet, kann zu Fehlern oder Designfehlern führen.

7.1 Grundlegende Unterschiede zwischen long und Long

Lassen Sie uns die Unterschiede zuerst organisieren.

ItemlongLong
TypePrimitiveClass (Wrapper)
null allowedNoYes
MethodsNoneAvailable
Memory efficiencyHighSlightly lower
Main usageCalculations, high-performance logicCollections, API integration

Einfach gesagt:

  • Hauptwahl für numerische Berechnungenlong
  • Wenn Sie ein Objekt benötigenLong

Das ist die grundlegende Idee.

7.2 Was ist die Long-Klasse?

Long ist eine Klasse, die es ermöglicht, einen long-Wert als Objekt zu behandeln.

Long a = 10L;
Long b = Long.valueOf(20);

Die Verwendung von Long ermöglicht es Ihnen:

  • null darzustellen
  • Methoden für Konvertierung und Vergleich zu nutzen
  • Werte in Sammlungen zu speichern ( List , Map usw.)

7.3 Autoboxing und Unboxing

Java konvertiert automatisch zwischen long und Long.

Long a = 10L;   // Autoboxing (long → Long)
long b = a;    // Unboxing (Long → long)

Das ist bequem, birgt aber wichtige Fallstricke.

7.3.1 Vorsicht vor null und Laufzeitfehlern

Long a = null;
long b = a;  // NullPointerException

Wenn Unboxing auftritt, während ein Long null ist,
wird eine Laufzeitfehler ausgelöst.

Daher:

  • Der Wert existiert immer → long
  • Der Wert könnte fehlen oder nicht gesetzt sein → Long

Diese Unterscheidung ist äußerst wichtig.

7.4 Vergleichsfalle (== vs equals)

Beim Vergleichen von Long-Objekten sollten Sie == nicht verwenden.

Long a = 100L;
Long b = 100L;

System.out.println(a == b);      // May be true
System.out.println(a.equals(b)); // Always true

== vergleicht Referenzen, während equals Werte vergleicht.
Bei Long kann internes Caching das Verhalten besonders verwirrend machen.

Verwenden Sie immer equals, wenn Sie Werte vergleichen.
Dies ist die sichere Regel.

7.5 Häufig verwendete Konstanten und Methoden in Long

Die Klasse Long bietet Funktionen, die in der Praxis häufig verwendet werden.

Long.MAX_VALUE
Long.MIN_VALUE

Diese Konstanten sind wichtig, um long‑Grenzwerte sicher zu handhaben.

Konvertierungsmethoden sind ebenfalls sehr verbreitet:

long x = Long.parseLong("123");
Long y = Long.valueOf("456");
  • parseLong : gibt ein primitives long zurück
  • valueOf : gibt ein Long‑Objekt zurück

Wählen Sie je nach Anwendungsfall.

7.6 Wie entscheidet man, welche Variante zu verwenden ist

Wenn Sie unsicher sind, nutzen Sie diese Richtlinien:

  • Berechnungen und numerische Logiklong
  • Mögliche null‑WerteLong
  • Speicherung in CollectionsLong
  • Performance‑kritischer Codelong

In der Praxis ist der stabilste Ansatz: Verwenden Sie long standardmäßig und setzen Sie Long nur ein, wenn es nötig ist.

8. String ↔ long Konvertierung (Wesentlich für Eingaben, Konfigurationen und externe Daten)

In realen Anwendungen konvertieren Sie Werte häufiger von Strings zu long als dass Sie sie direkt im Code schreiben.

  • Formulareingaben
  • CSV‑ oder JSON‑Daten
  • Konfigurationsdateien
  • Umgebungsvariablen

Hier stellen wir sichere und korrekte Wege zur Konvertierung zwischen Strings und long vor.

8.1 String → long (Zahlen parsen)

Die beiden gängigsten Methoden, einen String in ein long zu konvertieren, sind:

8.1.1 Verwendung von Long.parseLong (am häufigsten)

long value = Long.parseLong("12345");
  • Rückgabetyp: long
  • Bei Fehlschlag: wirft NumberFormatException

Dies ist die Standardwahl, wenn Sie den Wert in Berechnungen verwenden möchten.

8.1.2 Verwendung von Long.valueOf

Long value = Long.valueOf("12345");
  • Rückgabetyp: Long
  • Kann internes Caching nutzen

Das ist nützlich, wenn Werte in Collections gespeichert werden oder ein null‑Handling erforderlich ist.

8.2 Umgang mit Konvertierungsfehlern und Ausnahmen

Die folgenden Strings führen zu einem Konvertierungsfehler:

Long.parseLong("abc");
Long.parseLong("12.3");
Long.parseLong("");

Alle diese werfen zur Laufzeit NumberFormatException.

Bei externen Eingaben sollten Sie stets Ausnahmebehandlung einsetzen:

try {
    long value = Long.parseLong(input);
} catch (NumberFormatException e) {
    // Handle invalid numeric input
}

In der Praxis sollten Sie niemals davon ausgehen, dass Eingaben immer gültig sind.

8.3 long → String (für Anzeige und Ausgabe)

Es gibt mehrere Möglichkeiten, long‑Werte in Strings zu konvertieren.

8.3.1 Verwendung von Long.toString

long value = 12345;
String text = Long.toString(value);

Diese Methode ist speziell für long und drückt die Absicht klar aus.

8.3.2 Verwendung von String.valueOf

String text = String.valueOf(value);

Dieser Ansatz ist ebenfalls verbreitet und bietet null‑Sicherheit.

8.4 Welche Konvertierungsmethode sollten Sie wählen?

Nutzen Sie diese Richtlinien:

  • Sie benötigen einen numerischen Wert für BerechnungenLong.parseLong
  • Sie benötigen ein ObjektLong.valueOf
  • Anzeige oder LoggingString.valueOf / Long.toString

8.5 Wichtige Punkte, die Sie bei der Konvertierung beachten sollten

Behalten Sie stets Folgendes im Hinterkopf:

  • Vertrauen Sie Eingaben niemals blind
  • Schreiben Sie Code, der davon ausgeht, dass Ausnahmen auftreten können
  • Achten Sie auf Grenzwerte (MAX / MIN)
  • Berücksichtigen Sie zukünftiges Wachstum der Ziffernlänge

Die Befolgung dieser Prinzipien wird die Anzahl von konvertierungsbedingten Bugs erheblich reduzieren.

9. Praktische Anwendungsfälle für long (Beispiele aus der Praxis)

Nachdem wir die Grundlagen behandelt haben, schauen wir uns warum long in realen Systemen gewählt wird, Fall für Fall.

9.1 UNIX‑Zeit und Zeitstempel

Eine typische Methode, die aktuelle Zeit in Java zu erhalten, ist:

long now = System.currentTimeMillis();

UNIX‑Zeit in Millisekunden überschreitet bereits den int‑Bereich bei weitem, sodass long de‑facto der Standard ist.

  • Log‑Zeitstempel
  • Messung von Ausführungszeiten
  • Ablauf‑ und Timeout‑Verwaltung

9.2 Datenbank‑IDs und sequentielle Schlüssel

Die meisten Systeme verwenden sequentielle IDs, um Datensätze zu identifizieren.

long userId;
long orderId;

Über lange Betriebszeiten:

  • Aufzeichnungszahlen können Hunderte Millionen oder Milliarden überschreiten
  • Zukünftige Erweiterungen können die Stellenzahl erhöhen

Die Verwendung von long von Anfang an reduziert das Risiko schmerzhafter Typänderungen später.

9.3 Geldverwaltung (Vermeidung von Gleitkommafehlern)

Die Verwendung von double oder float für Geld kann Rundungsfehler einführen.

Eine gängige Lösung ist, Beträge in der kleinsten Einheit mit long zu speichern.

// Manage amounts in yen
long price = 1500;
  • Präzise Addition und Subtraktion
  • Einfachere Vergleiche
  • Einfachere Überlauf‑Erkennung

9.4 Zähler, Summen und Akkumulatoren

Werte, die kontinuierlich steigen – wie Zugriffs‑Zähler – sind ebenfalls gute Kandidaten für long.

long totalCount = 0;
totalCount++;

Selbst wenn der Wert klein beginnt, antizipiert die Wahl von long zukünftiges Wachstum.

9.5 Hash‑Werte und interne Berechnungen

In Algorithmen oder interner Verarbeitung benötigen Sie möglicherweise:

  • Temporäre Speicherung von Berechnungsergebnissen
  • Größeren Wertebereich als int, aber keine beliebige Präzision

long bietet oft das richtige Gleichgewicht.

9.6 Ist „Einfach long verwenden“ immer korrekt?

Die wichtigste Erkenntnis:

  • long blind zu verwenden ist nicht immer korrekt
  • Aber wenn der Wert wachsen kann, ist es ein starker Kandidat

Während der Entwurfsphase reicht es, über Folgendes nachzudenken:

  • Den maximal erwarteten Wert
  • Ob der Wert im Laufe der Zeit wächst

macht die Entscheidung viel klarer.

10. (Fortgeschritten) long als unsigned behandeln

Javas long ist ein vorzeichenbehafteter Integer.
Wenn Sie den nicht‑negativen Bereich maximieren wollen, benötigen Sie einen anderen Ansatz.

10.1 Java hat keinen unsigned long‑Typ

Im Gegensatz zu C oder C++ bietet Java keinen unsigned long‑Typ.
long verwendet stets diesen Bereich:

  • -9,223,372,036,854,775,808
  • +9,223,372,036,854,775,807

10.2 Wenn Sie unsigned‑Semantik benötigen

In der Praxis möchten Sie möglicherweise unsigned‑Verhalten in Fällen wie:

  • Ergebnisse von Bit‑Operationen
  • Hash‑Werten
  • Netzwerk‑Protokoll‑Nummern
  • IDs oder Tokens, die als rohe Zahlen behandelt werden

10.3 Verwendung von unsigned‑Methoden in der Long‑Klasse

Die Long‑Klasse stellt Methoden für unsigned‑Operationen bereit:

Long.compareUnsigned(a, b);
Long.divideUnsigned(a, b);
Long.remainderUnsigned(a, b);

Dies ermöglicht:

  • Die interne Darstellung als long beizubehalten
  • Unsigned‑Logik nur bei Vergleichen oder Berechnungen anzuwenden

10.4 Werte als unsigned anzeigen

String text = Long.toUnsignedString(value);

Dies konvertiert einen Wert in einen String, als wäre er unsigned.

10.5 Erzwingen Sie keine unsigned‑Verwendung

Für typische Geschäftsdaten – Geld, Zähler, Zeit – ist vorzeichenbehaftetes long sicherer und klarer.

Betrachten Sie unsigned‑Handhabung als spezialisiertes Werkzeug, nicht als Standard.

11. Zusammenfassung (Wichtigste Punkte zu long)

Fassen wir die wichtigsten Punkte zusammen:

  • long ist ein 64‑Bit vorzeichenbehafteter Integer
  • Ideal für große Ganzzahlen (IDs, Zeit, Geld usw.)
  • Verwenden Sie Long.MAX_VALUE / Long.MIN_VALUE, um Bereiche sicher zu handhaben
  • Fügen Sie L zu numerischen Literalen hinzu, wenn nötig
  • Achten Sie auf int‑basierten Überlauf bei Zwischenergebnissen
  • Überlauf kann selbst bei long auftreten
  • Verwenden Sie Math.addExact und verwandte Methoden zur Sicherheit
  • Standardmäßig long verwenden, Long nur bei Bedarf einsetzen
  • Unterschätzen Sie nicht die String‑Konvertierung, Grenzen oder Ausnahmebehandlung

Wenn Sie diese Punkte berücksichtigen, vermeiden Sie die meisten long‑bezogenen Probleme.

12. Häufig gestellte Fragen (FAQ)

12.1 F. Was sind die maximalen und minimalen Werte von long?

A.
Sie müssen die Zahlen nicht auswendig lernen. Verwenden Sie diese Konstanten:

Long.MAX_VALUE;
Long.MIN_VALUE;

12.2 F. Ist das „L“-Suffix immer erforderlich?

A.
Es ist erforderlich für numerische Literale, die den int‑Bereich überschreiten. Es ist auch nützlich, wenn Sie Berechnungen als long auswerten möchten.

12.3 F. Kann Überlauf selbst bei long auftreten?

A.
Ja. Java wirft nicht automatisch Fehler.
Verwenden Sie Methoden wie Math.addExact, wenn die Erkennung wichtig ist.

12.4 Q. Sollte ich long oder Long verwenden?

A.
Verwenden Sie standardmäßig long.
Verwenden Sie Long nur, wenn Sie null oder Sammlungen benötigen.

12.5 Q. Was ist der korrekte Weg, einen String in long zu konvertieren?

A.
Der gebräuchlichste Ansatz ist:

long value = Long.parseLong(str);

Denken Sie immer daran, Ausnahmen für externe Eingaben zu behandeln.