Anwendungssysteme Casten Grundlagen Datentypenumwandlung Name: Datum: Klasse: Blatt Nr.: 1/1 Lfd. Nr.: Umwandlung Primitiver Datentyp -> Primitiver Datentyp Nicht immer liegt während des Programmablaufs der Wert einer Variable in dem gewünschtem Datentyp vor. Deshalb kann es nötig sein, den Datentyp umzuwandeln(zu casten). Grundsätzlich gilt bei den primitiven Datentypen, dass kleine Datentypen implizit in größere Datentypen umgewandelt werden, ohne das der Programmierer dies extra anweisen muss. Zuweisung ohne Informationsverlust Explizite Typanpassung int zahl = 65; double byte b = zahl; //funktioniert nicht! boolean float Zwar ist die Zahl 65 klein genug, um in den Wertebereich von byte zu passen, aber verbietet der long Compiler in Java grundsätzlich jede Umwandlung, wenn Informationen verloren gehen könnten. int Beispiel: int n = (int) 3.1415; short char byte Ziel Cast double implizite Typanpassung Eine Typumwandlung hat eine sehr hohe Priorität. Daher muss der Ausdruck gegebenenfalls geklammert werden. Beispiel: int n = (int) 1.0315 + 2.1; int m = (int)(1.0315 + 2.1); // Compilerfehler // das ist korrekt Umwandlung Primitiver Datentyp -> String (Abstrakter Datentyp) Diese Umwandlung ist typischerweise bei GUIs nötig, wenn z.B. in einem JLabel das Ergebnis einer Rechnung als Text gesetzt werden soll. int ergebnis = 1+1; //kompliziertere Rechnungen möglich lblErgebnistext.setText(ergebnis); Test.java:37:20: setText(java.lang.String) in javax.swing.JLabel cannot be applied to (int) lblErgebnistext.setText(x); ^ 1 error Lösung int ergebnis = 1+1; //kompliziertere Rechnungen möglich lblErgebnistext.setText(ergebnis + ""); An die Variable wird die leere Zeichenkette angehangen. Dabei wird eine implizierte Typumwandlung durch den + Operator durchgeführt, welcher einen beliebigen primitiven Datentyp mit einer Zeichenkette verknüpfen kann. Umwandlung String (Abstrakter Datentyp) -> Primitiver Datentyp Diese Umwandlung ist typischerweise bei GUIs nötig, wenn z.B. aus einem JTextField ein Wert ausgelesen werden soll. Dieser liegt standardmäßig als Text (String) vor. Lösung short wert = Short.parseShort(tfdEingabe.getText()); int wert = Integer.parseInt(tfdEingabe.getText()); long wert = Long.parseLong(tfdEingabe.getText()); float wert = Float.parseFloat(tfdEingabe.getText()); double wert = Double.parseDouble(tfdEingabe.getText()); char wert = tfdEingabe.getText().charAt(0); //erstes Zeichen ©Tenbusch