Die kurze Antwort
Integrale Typen ( JLS 4.2.1 ) sind kategorisch anders als Gleitkommatypen ( JLS 4.2.3 ) . Es kann Ähnlichkeiten in Verhalten und Operationen geben, aber es gibt auch charakteristische Unterscheidungsmerkmale, so dass eine Verwechslung der beiden zu vielen Fallstricken führen kann.
Der Unterschied im Verhalten bei der Division durch Null ist nur einer dieser Unterschiede. Daher lautet die kurze Antwort, dass Java sich so verhält, weil die Sprache dies sagt.
Die Werte der ganzzahligen Typen sind ganze Zahlen in den folgenden Bereichen:
byte
: von -128
bis 127
einschließlich, d. h. [-2
7
, 2
7
-1]
short
: von -32768
bis 32767
einschließlich, d. h. [-2
15
, 2
15
-1]
int
: von -2147483648
bis 2147483647
einschließlich, d. h. [-2
31
, 2
31
-1]
long
: von -9223372036854775808
bis 9223372036854775807
einschließlich, d. h. [-2
63
, 2
63
-1]
char
, von '\u0000'
bis '\uffff'
inklusive, also von 0
bis 65535
, also [0, 2
16
-1]
Die Fließkommatypen sind float
und double
, die konzeptuell dem 64-Bit-Format mit einfacher Genauigkeit und dem 64-Bit-Format mit doppelter Genauigkeit zugeordnet sind IEEE 754 Werte und Operationen.
Ihre Werte sind wie folgt geordnet, vom kleinsten zum größten:
0.0 == -0.0
), Zusätzlich gibt es spezielle Not-a-Number ( NaN
) Werte, die ungeordnet sind. Dies bedeutet, dass wenn (oder beide!) Der Operand NaN
ist:
<
, <=
, >
und >=
return false
==
gibt false
zurück
!=
gibt true
zurück
Insbesondere x != x
ist true
wenn und nur wenn x
ist NaN
.
Für z.B. double
, die Unendlichkeiten und NaN
können wie folgt bezeichnet werden:
Double.POSITIVE_INFINITY
Double.NEGATIVE_INFINITY
Double.NaN
, testbar mit der Hilfsmethode boolean isNaN(double)
Die Situation ist analog zu float
und Float
.
Numerische Operationen können in diesen Fällen nur Exception
auslösen:
NullPointerException
, wenn die Unboxing-Konvertierung von null
reference erforderlich ist ArithmeticException
, wenn die rechte Seite für ganze Divide / Rest-Operationen OutOfMemoryError
, wenn eine Box-Konvertierung erforderlich ist und nicht genügend Speicher verfügbar ist Sie sind nach Wichtigkeit geordnet, um eine häufige Quelle für Fallstricke zu sein. Allgemein gesprochen:
null
sein können.
Für ganze Zahl Operation:
ArithmeticException
, wenn die rechte Seite Null ist Für Fließkomma Operation:
NaN
oder 0
ist, lautet das Ergebnis NaN
. NaN
Die allgemeine Regel für alle Gleitkommaoperationen lautet wie folgt:
NaN
.NaN
als Operand ergeben NaN
als Ergebnis. Es gibt immer noch viele Probleme, die nicht durch diese lange Antwort abgedeckt sind, aber die Leser werden ermutigt, verwandte Fragen und referenzierte Materialien zu durchsuchen.
Dies liegt daran, dass Integer-Arithmetik das Ergebnis immer umschließt, mit Ausnahme von (Division / Rest by Zero).
Im Falle von float, wenn es einen Überlauf oder Unterlauf gibt, geht die Verpackung auf 0, unendlich oder NaN.
Während des Überlaufs gibt es unendlich und während des Unterlaufs gibt es 0.
Auch hier gibt es positive & amp; negativer Überlauf / Unterlauf.
Probieren Sie:
Dies ergibt einen negativen Überlauf
Ausgabe
b = -Unendlichkeit
In gleicher Weise ergibt ein positiver Unterlauf einen Wert von 0 und einen negativen Unterlauf von -0
Bestimmte Operationen können auch dazu führen, dass ein NaN (Not a Number) durch float / double zurückgegeben wird.
Für zB:
Ausgabe von
b = NaN
Tags und Links java integer floating-point infinity