Initialisieren Sie ein Long in Java


213

Primitive Datentypen - Oracle Doc sagt, dass der Bereich longin Java -9,223,372,036,854,775,808zu 9,223,372,036,854,775,807. Aber wenn ich so etwas in meiner Sonnenfinsternis mache

long i = 12345678910;

es zeigt mir " The literal 12345678910 of type int is out of range" Fehler.

Es gibt 2 Fragen.

1) Wie initialisiere ich das longmit dem Wert 12345678910?

2) Sind alle numerischen Literale standardmäßig vom Typ int?


Und wie wäre es mit einem Long?
Wolfgang Fahl

1
@WolfgangFahl Gleiche Regeln für Long- aufgrund von Auto-Boxing können Sie verwenden Long i = 12345678910L, oder Long i = Long.valueOf(12345678910L)für die Fälle, in denen Sie Auto-Boxing nicht verwenden können.
Dorian Gray

Antworten:


422
  1. Sie sollten hinzufügen L: long i = 12345678910L;.
  2. Ja.

Übrigens: Es muss kein Großbuchstabe L sein, aber Kleinbuchstaben werden oft verwechselt 1:).


3
Nur für den Fall, dass sich jemand wundert: Das gleiche gilt für Hex, zB0x200000000L
user149408

@Victor Long.valueOf (long) gibt ein Long zurück, kein primitives Long. Die Lösung von MByD vermeidet es, sich auf das automatische Boxen zu verlassen.
Gouessej

@ user149408 Vielleicht meinst du 0x20000000L?
Pluto

2
@Pluto 0x20000000Lwürde funktionieren, kann aber immer noch durch int(eine 32-Bit-Ganzzahl) dargestellt werden, 0x20000000würde also genauso gut funktionieren. 0x200000000Ldurchbricht diese Grenze und macht das Nachlaufen Lnotwendig.
user149408

58
  1. Sie müssen das LZeichen am Ende der Zahl einfügen, damit Java es als lang erkennt.

    long i = 12345678910L;
  2. Ja.

Siehe Primitive Datentypen mit der Angabe "Ein ganzzahliges Literal ist vom Typ lang, wenn es mit dem Buchstaben L oder l endet; andernfalls ist es vom Typ int."


39

Sie müssen Lam Ende wie folgt Großbuchstaben hinzufügen

long i = 12345678910L;

Gleiches gilt für float with 3.0f

Welches sollte Ihre beiden Fragen beantworten


15

Um lange zu initialisieren, müssen Sie "L" an das Ende anhängen.
Es kann entweder Groß- oder Kleinbuchstaben sein.

Alle numerischen Werte sind standardmäßig int. Selbst wenn Sie eine Operation bytemit einer beliebigen Ganzzahl ausführen , bytewird diese zuerst hochgestuft intund dann werden alle Operationen ausgeführt.

Versuche dies

byte a = 1; // declare a byte
a = a*2; //  you will get error here

Sie erhalten eine Fehlermeldung, da dies 2standardmäßig der Fall ist int.
Daher versuchen Sie, sich bytemit zu multiplizieren int. Daher wird das Ergebnis typisiert, intdem es nicht zugewiesen werden kann byte.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.