HOWTO · Java
Umgang mit ganzzahligem Überlauf und Unterlauf in Java
In diesem Tutorial wird der Umgang mit Integer-Überlauf und -Unterlauf in Java behandelt.
Auf dieser Seite
Dieser Artikel beschreibt den Überlauf und Unterlauf eines ganzzahligen Datentyps und die Behandlung dieses Problems.
Überblick über Integer-Überlauf und -Unterlauf in Java
Wenn Sie mit ganzzahligen Werten arbeiten, kann es zu einem Überlauf- oder Unterlauffehler kommen. Es passiert, wenn wir eine Variable falsch deklarieren, z. B. einen Wert zuweisen, der außerhalb des Bereichs für den deklarierten Datentyp liegt.
Wie wir wissen, gibt es vier Ebenen von Integer-Datentypen mit unterschiedlichen Größen, die unten angegeben sind:
| Datentyp | Größe |
|---|---|
byte |
8 Bit |
short |
16 Bit |
int |
32-Bit |
long |
64-Bit |
Wenn wir das int in Java betrachten, hat es eine Reihe von Werten, die wir zuweisen können. Wie wir bereits wissen, hat der Datentyp int eine Größe von 32-bits. Der Bereich der akzeptierten Werte in int liegt also zwischen -2147483648 und 2147483647.
Sie können den maximalen und minimalen Wert schnell erhalten, indem Sie Integer.MAX_VALUE und Integer.MIN_VALUE verwenden.
Ganzzahlüberlauf in Java
Hier sehen wir das Auftreten eines Integer-Überlaufs und seine Handhabung.
Auftreten eines Integer-Überlaufs
Beispielcode:
public class IntegerOverflow {
public static void main(String[] args) {
int Intvalue = Integer.MAX_VALUE - 1;
for (int i = 0; i < 4; i++) {
System.out.println(Intvalue);
Intvalue = Math.addExact(Intvalue, 1);
}
}
}
Wenn Sie nun das obige Programm ausführen, zeigt die Konsole die folgende Ausgabe:
2147483646
2147483647
Exception in thread "main" java.lang.ArithmeticException: integer overflow
at java.base/java.lang.Math.addExact(Math.java:828)at IntegerOverflow.main(IntegerOverflow.java:9)
Ganzzahlüberlauf behandeln
Wir müssen den Wertebereich erhöhen, um unser obiges Beispiel zu lösen. In unserem Fall typisieren wir integer in long. Unser aktualisierter Code für das obige Beispiel sieht wie folgt aus.
Beispielcode:
public class IntegerOverflow {
public static void main(String[] args) {
int Intvalue = Integer.MAX_VALUE - 1;
long NewValue = (long) Intvalue; // Upgrading to new type
for (int i = 0; i < 4; i++) {
System.out.println(NewValue);
NewValue = Math.addExact(NewValue, 1);
}
}
}
Jetzt sehen Sie die folgende Ausgabe in Ihrer Konsole.
2147483646
2147483647
2147483648
2147483649
Integer-Unterlauf in Java
In diesem Abschnitt lernen wir den Integer-Unterlauf in Java kennen und wie wir damit umgehen können.
Auftreten eines ganzzahligen Unterlaufs
Beispielcode:
public class IntegerUnderflow {
public static void main(String[] args) {
int value = -2147483699; // Creating underflow intentionally
System.out.println(value - 1);
}
}
Wenn Sie nun das obige Programm ausführen, zeigt die Konsole die folgende Ausgabe:
/IntegerUnderflow.java:3: error: integer number too large
int value = -2147483699; // Creating underflow intentionally
^
1 error
Ganzzahligen Unterlauf behandeln
Um den obigen Fehler zu beheben, müssen wir den Bereich des Werts erneut vergrößern, und dazu können wir den ganzzahligen Wert auf die nächste Ebene umwandeln. Sehen Sie sich den unten geteilten Code an.
Beispielcode:
public class IntegerUnderflow {
public static void main(String[] args) {
long value = (long) -2147483638; // Type Casting
System.out.println(value - 1);
}
}
Jetzt sehen Sie die folgende Ausgabe in Ihrer Konsole.
-2147483639
Daher müssen wir den Bereich auf den Datentyp erweitern, um die Überlauf- oder Unterlaufprobleme zu lösen.