Vergleich von Ganzzahlen mit Byte-Grenzwerten
Im vorherigen Schritt haben wir uns mit dem Bereich des byte
-Datentyps (-128 bis 127) vertraut gemacht. Jetzt schauen wir uns an, was passiert, wenn wir versuchen, einem byte
-Variablen einen ganzzahligen Wert zuzuweisen, der außerhalb dieses Bereichs liegt.
Java verfügt über andere ganzzahlige Datentypen wie int
, die viel größere Werte aufnehmen können. Wenn Sie versuchen, einen größeren Wert in einen kleineren Container zu packen (z. B. einen int
-Wert in ein byte
), können Probleme auftreten.
-
Öffnen Sie die Datei HelloJava.java
im WebIDE-Editor.
-
Modifizieren Sie die main
-Methode, um einen ganzzahligen Wert einzubeziehen, der außerhalb des Byte-Bereichs liegt. Ersetzen Sie den vorhandenen Code innerhalb der main
-Methode durch Folgendes:
public static void main(String[] args) {
int largeIntValue = 200; // Dieser Wert liegt außerhalb des Byte-Bereichs
// Versuch, einen großen int-Wert einer byte-Variablen zuzuweisen
// byte myByte = largeIntValue; // Diese Zeile würde einen Kompilierungsfehler verursachen
System.out.println("Integer value: " + largeIntValue);
// Um einen größeren Integer einem Byte zuzuweisen, benötigen Sie eine Typumwandlung (Cast)
byte castedByte = (byte) largeIntValue;
System.out.println("Casted byte value: " + castedByte);
}
Schauen wir uns die Änderungen an:
- Wir deklarieren eine
int
-Variable largeIntValue
und weisen ihr den Wert 200 zu, der größer ist als der maximale Wert, den ein byte
aufnehmen kann (127).
- Die auskommentierte Zeile
byte myByte = largeIntValue;
zeigt, was passieren würde, wenn Sie direkt versuchen, largeIntValue
einem byte
zuzuweisen. Dies würde zu einem Kompilierungsfehler führen, da Java Sie daran hindert, möglicherweise Daten zu verlieren, ohne es ausdrücklich zu erlauben.
- Die Zeile
byte castedByte = (byte) largeIntValue;
zeigt, wie Sie die Zuweisung mithilfe einer Typumwandlung (Cast) erzwingen können. Das (byte)
vor largeIntValue
teilt Java mit, den int
-Wert in ein byte
umzuwandeln.
-
Speichern Sie die Datei (Strg+S oder Cmd+S).
-
Versuchen Sie nun, das modifizierte Programm im Terminal zu kompilieren:
javac HelloJava.java
Diesmal sollte die Kompilierung erfolgreich sein, da wir eine Typumwandlung verwendet haben.
-
Führen Sie das kompilierte Programm aus:
java HelloJava
Sie werden die folgende Ausgabe sehen:
Integer value: 200
Casted byte value: -56
Beachten Sie, dass der Wert von castedByte
-56 und nicht 200 ist. Dies liegt daran, dass wenn Sie einen Wert, der außerhalb des Bereichs des Zieltyps liegt, umwandeln, der Wert "überläuft" (wraparound). Dies wird als Überlauf (oder Unterlauf für negative Zahlen) bezeichnet. Der Wert 200 wird in Binärdarstellung repräsentiert, und wenn er auf 8 Bits (ein Byte) gekürzt wird, ergibt sich der Wert -56.
Dieser Schritt zeigt die Wichtigkeit des Verständnisses von Datentypbereichen und die vorsichtige Verwendung von Typumwandlungen beim Konvertieren zwischen verschiedenen Typen, um unerwartete Ergebnisse aufgrund von Überlauf oder Unterlauf zu vermeiden.