Sehen Sie sich die drei Codezeilen unten an.
%Vor%Die zweite Zeile enthält Kompilierungsfehler, während die anderen Zeilen keine Kompilierungsfehler enthalten. Die erste Zeile funktioniert ohne Suffix f und die dritte Zeile arbeitet mit Suffix f. Warum ist das?
Fließkomma-Literale in Java sind standardmäßig ein double
-Wert.
JLS 3.10.2 Fließkomma-Literale
Ein Fließkomma-Literal hat den Typ
float
, wenn es mit einem ASCII-Buchstaben versehen istF
oderf
; andernfalls ist sein Typdouble
und kann optional mit einem ASCII-BuchstabenD
oderd
ergänzt werden.
Sie können einem double
keinen float
-Wert zuweisen, ohne dass eine explizite Eingrenzungskonvertierung vorgenommen wurde. Sie haben daher zwei Möglichkeiten:
f
oder F
, um einen float
-Wert (float)
Ein Beispiel für Letzteres ist:
%Vor%Der Grund, warum dies kompiliert:
%Vor% liegt daran, dass die Erweiterung der Konvertierung von int
nach float
implizit im Kontext einer Zuweisung erfolgen kann.
JLS 5.2 Zuweisungskonvertierung
Zuordnungskonvertierung tritt auf, wenn der Wert eines Ausdrucks einer Variablen zugewiesen wird: Der Typ des Ausdrucks muss in den Typ der Variablen konvertiert werden. Zuordnungskontexte ermöglichen die Verwendung eines der folgenden Elemente:
- eine erweiterte primitive Konvertierung (§5.1.2)
- [...]
JLS 5.1.2 Erweiterung der Primitiv-Konvertierung
Die folgenden 19 spezifischen Konvertierungen für primitive Typen werden als erweiternde Grundelementkonvertierungen bezeichnet:
int
bislong
,float
oderdouble
- [...]
Wie oben erwähnt, gibt es auch das Suffix D
oder d
für double
. Betrachten Sie dieses Snippet zum Beispiel:
Es gibt auch ein Suffix für long
Literale, also L
oder l
(Kleinbuchstaben). Es wird empfohlen, dass Sie die Großbuchstabe-Variante verwenden.
JLS 3.10.1 Ganzzahlige Literale
Ein Integer-Literal hat den Typ
long
, wenn es mit einem ASCII-Buchstaben versehen istL
oderl
(ell
); Sonst ist es vom Typint
. Das SuffixL
wird bevorzugt, weil der Buchstabel
(ell
) oft schwer von der Ziffer1
(one
) zu unterscheiden ist.
Sie weisen einer double
-Variable einen float
-Wert zu. 1.1
von selbst (ohne das f
am Ende angeheftet) wird vom Compiler vom Typ double
angenommen. Der Compiler macht keine impliziten Downcasts, weil dort die Präzision verloren gehen kann.
In Java wird für jede Fließkommazahl (jede Zahl mit einem Dezimalpunkt) standardmäßig ein double
verwendet, was genauer ist als ein float
. Und standardmäßig lässt Java eine double
nicht in eine float
umwandeln, weil die Präzision verloren geht.
Sie können weiterhin double
einem float
zuweisen, indem Sie Folgendes umsetzen:
Tags und Links java floating-point