Es scheint, dass der Compiler beim Eingeben einer Zahl in Java diese automatisch als Ganzzahl liest. Wenn Sie also (lang) 6000000000
(nicht im Bereich der Ganzzahl) eingeben, wird er sich beschweren, dass 6000000000
es sich nicht um eine Ganzzahl handelt. Um dies zu korrigieren, musste ich angeben 6000000000L
. Ich habe gerade von dieser Spezifikation erfahren.
Gibt es andere Nummernspezifikationen wie Short, Byte, Float, Double? Es scheint, als wären diese gut zu haben, denn (ich nehme an) wenn Sie angeben könnten, dass die Zahl, die Sie eingeben, kurz ist, müsste Java sie nicht umsetzen - das ist eine Annahme, korrigieren Sie mich, wenn ich falsch liege . Normalerweise würde ich diese Frage selbst suchen, aber ich weiß nicht, wie diese Art der Nummernspezifikation überhaupt heißt.
1
mitl
und0
mitO
(und so weiter) verwechselt werden , besteht Ihre Priorität darin, die Schriftart richtig einzustellen (wenn Sie können) ), und sorgen Sie dann dafür, dass Sie die Umschalttaste nicht verpassen.long _lo = 30;
und30L
bedeutet dies nicht, dass meine Variable in float konvertiert wird ? Oder im Falle ,_lo = _lo + 2.77
dass_lo
wird in gegossen werden Schwimmer obwohl es als erklärt wurde lange30
handelt es sich um eine,int
die automatisch über eine erweiterte Konvertierung in eine konvertiert wirdlong
. Im zweiten Fall ist Ihre Aussage illegal. Sie müssten explizit die rechte Seite zu lang werfen, zB_lo = (long) (_lo + 2.77)
l
und1
(0
undO
resp.) Ziemlich ähnlich ist .Ich hoffe, es macht Ihnen nichts aus, wenn Sie eine leichte Tangente haben, aber ich dachte, Sie könnten daran interessiert sein, das zu wissen
F
(für float).D
(für Doppel) undL
(lange), wurde ein Vorschlag gemacht worden Suffixe hinzufügen fürbyte
undshort
-Y
undS
jeweils . Dies würde die Notwendigkeit beseitigen, in Bytes umzuwandeln, wenn die Literal-Syntax für Byte-Arrays (oder kurze Arrays) verwendet wird. Zitat aus dem Vorschlag:Joe Darcy ist für Project Coin für Java 7 und seinen Blog verantwortlich war eine einfache Möglichkeit, diese Vorschläge zu verfolgen.
quelle
0b
Präfix für binäre Literale erhalten. Whoop.Standardmäßig wird jeder integrale primitive Datentyp (Byte, Short, Int, Long) vom Java-Compiler als Int- Typ behandelt . Für Byte und Short gibt es kein Problem und kein Suffix erforderlich, solange der ihnen zugewiesene Wert in ihrem Bereich liegt. Wenn der Wert für Byte und Kurzschluss den Bereich überschreitet, ist eine explizite Typumwandlung erforderlich.
Ex:
Um dies zu überwinden, führen Sie ein Gusstyp durch.
Bei einem langen Datentyp kann der ganzzahlige Wert problemlos akzeptiert werden. Angenommen, wir weisen wie zu
In diesem Fall ist kein Suffix wie L / l erforderlich. Standardmäßig wird der Wert 2147483647 vom Java-Compiler als int-Typ betrachtet. Das Casting des internen Typs wird vom Compiler durchgeführt und int wird automatisch zum Typ Long heraufgestuft.
Hier müssen wir das Suffix als L setzen, um das Literal 2147483648 vom Java-Compiler als langen Typ zu behandeln.
so endlich
quelle
Dies sind Literale und werden in Abschnitt 3.10 der Java-Sprachspezifikation beschrieben.
quelle
Da das Parsen von Literalen zur Kompilierungszeit erfolgt, ist dies für die Leistung absolut irrelevant. Der einzige Grund, warum Suffixe
short
undbyte
Suffixe schön wären, ist, dass sie zu kompakterem Code führen.quelle
Um zu verstehen, warum zwischen
int
undlong
wörtlich unterschieden werden muss, betrachten Sie:gegen
Wie zu Recht zu erwarten, geben beide Codefragmente der Variablen den gleichen Wert
l
. Was ist die Interpretation, ohne unterscheidenint
undlong
wörtlich sagen zu können-1 >>> 1
?oder
Selbst wenn die Zahl im gemeinsamen Bereich liegt, müssen wir den Typ angeben. Wenn sich die Standardeinstellung mit der Größe des Literal ändert, ändert sich die Interpretation der Ausdrücke nur durch Ändern der Ziffern merkwürdig.
Dies tritt nicht auf
byte
,short
undchar
weil sie immer heraufgestuft werden, bevor arithmetische und bitweise Operationen ausgeführt werden. Wahrscheinlich sollten es Suffixe vom Typ Integer sein, die beispielsweise in Array-Initialisierungsausdrücken verwendet werden sollen, aber es gibt keine.float
verwendet Suffixf
unddouble
d
. Andere Literale haben eindeutige Typen, wobei es einen speziellen Typ für gibtnull
.quelle
Integer.MAX_VALUE
, aber wenn es keine Möglichkeit gibt, zwischenint
undlong
Literalen zu unterscheiden , wäre es mehrdeutig. / Ich habe keine Erinnerung an diese Frage, habe aber trotzdem meine Antwort geklärt.