Frage

Wenn Sie eine Nummer in Java eingeben, liest der Compiler sie automatisch als Ganzzahl, weshalb Sie (lang) beim Eingeben (lang) eingeben. 6000000000 (nicht in der Ganzzahl -Reichweite) Es wird sich beschweren 6000000000 ist keine Ganzzahl. Um dies zu korrigieren, musste ich angeben 6000000000L. Ich habe gerade etwas über diese Spezifikation erfahren.

Gibt es andere Zahlenspezifikationen wie für kurze, byte, float, doppelt? Es scheint, als wären diese gut zu haben . Normalerweise würde ich diese Frage selbst durchsuchen, aber ich weiß nicht, welche Art von Zahlenspezifikation überhaupt genannt wird.

War es hilfreich?

Lösung

Es gibt bestimmte Suffixe für long (z.B 39832L), float (z.B 2.4f) und double (z.B -7.832d).

Wenn es kein Suffix gibt und es ein integraler Typ ist (z. B. 5623) Es wird angenommen, dass es ein ist int. Wenn es kein integraler Typ ist (z. B. zB 3.14159) Es wird angenommen, dass es a ist double.

In allen anderen Fällen (byte, short, char), Sie brauchen die Besetzung, da es kein spezifisches Suffix gibt.

Die Java -Spezifikation ermöglicht sowohl obere als auch untere Fallsuffixe, aber die obere Fallversion für longS ist wie der obere Fall bevorzugt L ist weniger einfach mit einer Zahl zu verwechseln 1 als der untere Fall l.

Siehe das JLS Abschnitt 3.10 Für die blutigen Details (siehe Definition von IntegerTypeSuffix).

Andere Tipps

Ich hoffe, es wird Ihnen keine leichte Tangente ausmachen, aber ich dachte, Sie könnten daran interessiert sein, das außerdem zu wissen F (für float), D (für doppelt) und L (für lange), Es wurde ein Vorschlag gemacht Suffixe für hinzufügen byte und shortY und S beziehungsweise. Dies würde die Notwendigkeit beseitigen, Bytes zu werfen, wenn sie die buchstäbliche Syntax für Byte- (oder kurze) Arrays verwenden. Zitat des Beispiels aus dem Vorschlag:

Hauptvorteil: Warum ist die Plattform besser, wenn der Vorschlag angenommen wird?

Cruddy Code wie

 byte[] stuff = { 0x00, 0x7F, (byte)0x80,  (byte)0xFF};

kann als wiederhergestellt werden

 byte[] ufum7 = { 0x00y, 0x7Fy, 0x80y, 0xFFy };

Joe Darcy überwacht die Projektmünze für Java 7, und Sein Blog war eine einfache Möglichkeit, diese Vorschläge zu verfolgen.

Dies sind Literale und werden in beschrieben Abschnitt 3.10 der Java -Sprachespezifikation.

Standardmäßig wird jeder integrale primitive Datentyp (Byte, kurz, int, lang) als behandelt int Geben Sie nach Java Compiler ein. Zum Byte und kurz, Solange der ihnen zugewiesene Wert in ihrem Bereich liegt, ist kein Problem und kein Suffix erforderlich. Wenn der Wert zugewiesen wird Byte und kurz Übersteigt ihren Bereich, explizite Typguss ist erforderlich.

Ex:

byte b = 130; // CE: range is exceeding.

Um dieses Typ -Casting zu überwinden.

byte b = (byte)130; //valid, but chances of losing data is there.

Im Falle eines langen Datentyps kann es den Ganzzahlwert ohne Probleme akzeptieren. Angenommen, wir weisen wie zu wieen

Long l = 2147483647; //which is max value of int

In diesem Fall ist kein Suffix wie L/L erforderlich. Standardmäßig wird der Java -Compiler int -Typ betrachtet. Das interne Guss wird von Compiler durchgeführt und int wird automatisch zum langen Typ befördert.

Long l = 2147483648; //CE: value is treated as int but out of range 

Hier müssen wir Suffix als L einsetzen, um den wörtlichen 2147483648 als Long -Typ von Java Compiler zu behandeln.

so endlich

Long l = 2147483648L;// works fine.

Es scheint, als wären diese gut zu haben

Da das Parsen von Literalen zur Kompilierung der Zeit stattfindet, ist dies in Bezug auf die Leistung absolut irrelevant. Der einzige Grund, warum short und byte Suffixe wäre schön, dass es zu kompakteren Code führt.

In Betracht ziehen:

long l = -1 >>> 1;

gegen

int a = -1;
long l = a >>> 1;

Jetzt würden Sie erwarten, dass Code -Fragmente den gleichen Wert für die Variable geben l. Also brauchen wir Ausdruck auf int Literale als getan werden als ints.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top