Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Jetzt lerne ich Java 6

Typumwandlung

Testen Sie unsere 2013 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Bei jeder Berechnung taucht die Frage nach dem Datentypen des Ergebnisses auf. - In der Regel arbeitet die automatische Typumwandlung von Java zuverlässig, doch gibt es Situationen, in denen Sie manuell eingreifen müssen: Sehen Sie hier, wie das aussieht.
11:48

Transkript

Ich habe Ihnen ja etwas einfaches versprochen. Was ich Ihnen nicht versprochen habe, ist - dass Sie nicht hin und wieder darüber stolpern werden. In diesem Film werden wir uns mit Datentypumwandlungen beschäftigen, oder der englische Begriff dafür ist "casting". Was ist damit jetzt gemeint? Nun, Sie haben acht primitive Datentypen kennengelernt. Diese deklarieren Sie vorher und dann können Sie diese nutzen. Aber es kann natürlich sein, dass Sie während dem Ablauf Ihres Programmes auf die Idee kommen, verschiedene Datentypen miteinander zu verbinden. Das heißt, Sie haben auf der einen Seite Integer und machen eine Berechnung, wo auch ein Double drin vorkommt. Und wenn so etwas auftritt, dann muss der Compiler eigentlich schon, ja, etwas schwieriges tun. In dem Double ist natürlich eine ganz andere Art, Daten im Speicher abzulegen als im Integer. Und nun muss eben dann der Compiler entscheiden, was er tut. Nun an dieser Stelle würde jetzt die automatische Typenanpassung greifen. Und der Integerwert, damit eine Berechnung steckt, wird dem größerem Datentyp, also dem Double, angepasst. Das schauen wir uns aber doch besser mal an. Okay, dafür klappen wir unser Projekt auf. Ich gehe hier auf mein Paket "java". Und gehe über die rechte Maustaste, sage "New". Und wir müssen jetzt hier eine "Java Main Class" öffnen, damit wir hier auch eine eigene Klasse mit main-Methode bekommen. Das nennen wir einfach mal "Casting", Finisch. Bekommen hier eine neue Klasse. Und die hat auch dann schon gleiche main-Methode. Hier oben im Konstruktor können wir drum noch in die Tonne kloppen. Und hier rein schreiben wir jetzt grad mal unser Programm. Also gegeben: wir haben einen Integer, nennen wir das Ganze "zahl1" und dann belegen wir direkt mit 11. Dann ist die Sache auch schon mal gegessen. Dann haben wir ein Double, und das ist unsere "zahl2". Nun sagen wir, das ist 47. Und dann brauchen wir noch ein Ergebnis. Hm, was nehmen wir für ein Ergebnis? Da aber wir die beiden miteinander verrechnen wollen, dann nehmen wir doch vielleicht besser mal ein Double. Also sagen wir -ah, es gibt da noch ein Double … und soll das Ergebnis ... und dann fangen wir einmal mal an, zu rechnen: ergebnis = zahl1 + zahl2 Und damit wir das Ganze auch irgendwo mal sehen, was da rauskommt, jetzt wählen wir einfach ... das wollen wir per PrintLine ausgegeben haben: ergebnis: (Doppelpunkt) Und nun möchte ich keine zwei Zeilen schreiben PrintLine und PrintLine als Methode hier, unterstützen schöne Sache Man kann hier nämlich mehrere Dinge aneinander hängen. Ihre Zeichenketten Und um etwas aneinanderzukleben, also hier diese Zeichenkette "Ergebnis" mit etwas anderem, dann hängt man ein + Zeichen an. Das ist jetzt keine Addition, sondern das ist ein Aneinanderkleben, ein Kontaktieren dieser beiden Zeichenketten. Und wenn ich das so mache, dann kleben die beiden aneinander, und es kommt hier ein Stück hinten raus. Nun gut. Jetzt möchte ich das Ganze auch kompilieren. Jetzt kann ich nicht einfach hier auf "Play" drücken, weil in Wirklichkeit heißt das "Run Main Project". Wenn ich das mache, bekommen wir nicht diese Klasse hier ausgegeben, sondern, ja, die Klasse, die wir als Hauptklasse für unser Projekt angelegt hatten. Und das ist variablen.java Das lösen wir relativ einfach, indem wir hier kurz mal auf "Build" gehen, und dann sehen: Compile "Casting.java" Gut, damit könnte man schon mal kompilieren. Wir wollen es aber auch ausführen, und daher gehen wir mal kurz nach Run - Run File. Und nun sehen wir hier, es gibt einen eigenen Befehl für "Run File", und das "Umschalt + F6". Und das werde ich hier auch einfach mal verwenden. Und dann sehen wir hier, dass das Ganze läuft. Und hier unten ist unser Ergebnis: 58.0 Aha, Komma null… Das Komma null weist uns darauf hin, das ist ein Double. Ist 'ne schöne Fliesskommazahl. Okay, das bedeutet, genau an dieser Stelle hat jetzt der Compiler netterweise für uns eine Typumwandlung vorgenommen. Das hier ist ein Integer, das hier ist ein Double. Die beiden werden verrechnet, und rauskommt ein Double, also wird dieser hier vom Compiler für uns automatisch zum Double gemacht. Ist doch eine wunderbare Sache, oder? Nun, darauf können Sie sich in den meisten Fällen verlassen. Auch ist der Compiler so nett und weist und hin und wieder auf Dinge hin, die nicht so gut funktionieren. Auch das wollen wir uns mal kurz anschauen. Dazu legen wir noch ein zweites Ergebnis an. Diesmal aber als Intergerwert. Na gut, machen wir mal Folgendes: erg = zahl1 / 3 (dividiert durch… das wäre elf … durch 3) Hm, speichern wir mal. Und dann lassen wir hier mal erg ausgeben. Testen wir mal Umschalt + F6 Es kommt ein Ergebnis raus. Das Ergebnis heißt 3. Hm.. 3 mal 3 ist meines Erachtens aber 9, nicht 11. Das heißt, scheinbar tut in dieser Zeile Java sich definitiv verrechnen, oder… Naja, versuchen wir noch mal, wie ein Compiler zu denken. Zahl1 ist 11 - okay, das ist ein Integer. Da steht auch ein Integer. Integer durch Integer ergibt einen Integer. Aah, aber in Wirklichkeit kommt hier eine Fliesskommazahl raus. Ja, aber da unser Ergebnis hier ja auch ein Integer ist, schneidet das Ganze einfach ab. Und schon haben wir einen ganz klassischen Fehler. Diese Fehler sind bösartig, die sieht man nicht grade mal so. Nun, es gibt also die Stellen, an denen die automatische Typenumwandlung nicht so richtig funktioniert. Wie können wir denn sichergehen, dass das Ganze funktioniert? Naja, wenn wir hier einfach drum mal ein Ergebnis nehmen, oder denn Ergebnis ist ja ein Doublewert. Naja, machen wir mal. Sollten es natürlich auch richtig schreiben. Und testen das mal. Ao, okay! Hier bekommen wir nun jetzt einen Error und zwar: An der Stelle … da müssen wir aber natürlich auch Ergebnis eintragen. Und das kommt schon wieder 3 raus. Drei Komma null sogar, hm.. Also, wäre schön gewesen, aber auch das löst unser Problem nicht. Warum? Integer dividiert durch Integer - geht der Compiler davon aus - hier werden nur Integer benötigt. Und dieses Integerergebnis wäre 3. Und da stopft er nach Double rein - 3,0 Also, immer noch Autsch! Wie kriegen wir es denn jetzt nun gelöst? Durch eine von uns angestoßene Typenumwandlung. Und zwar haben wir gelernt, dass der Compiler netterweise immer dann automatisch einen Typ umwandelt, wenn eine der beiden Datentypen, die hier stehen, genauer ist für uns. 3 ist einer der Integer. Wir können zum Beispiel mal sagen, dass diese 3 nicht als Integer gewertet werden soll, sondern als Double. Und das macht man, indem man vor die Variable oder vor die Zahl in Klammern den neuen Datentyp schreibt, den wir gerne hätten. Das heißt, an dieser Stelle weisen wir nun an, dass er hier nicht 3 nimmt, sondern 3.000 Also das ist da Bewertung. Und wenn wir das mal kurz laufen lassen, kommen wir auch auf das richtige Ergebnis. Denken wir kurz wie der Compiler: aha, hier an dieser Stelle steht ein Doublewert, Integer ist ein kleinerer Datentyp als Double, also wird der, bevor wir berechnen, in ein Double umgewandelt. Double durch Double ergibt ein Double. Und entsprechend haben wir dann hier auch das richtige Ergebnis. Also, nicht ganz so einfach, aber eigentlich logisch zu verstehen, wenn man ein bisschen darüber nachdenkt. Jetzt kann das auch sein, dass in Berechnungen man die ganze Berechnung an sich dann schon wieder im Datentyp drehen möchte. Dafür sind Klammern ganz praktisch. Man kann also hier auch vor zahl1 ebenfalls noch man einen neuen Datentyp schreiben, so was in der Art… naja, dann sollten wir natürlich "Double" dahin schreiben. Ja, dann werden also beide Zahlen hier zuerst einmal in ein Double umgewandelt. Das funktioniert auch, wenn man Double setzt … lassen wir das mal kurz kompilieren. Kommt aufs Gleiche raus, wunderbar. Oder man kann auch sagen: naja, gut, klammern wir das Ganze. Aber dabei schießen wir uns an dieser Stelle jetzt leider wieder ins Knie. Jetzt würde zuerst die Berechnung hier drinnen stattfinden, und dann das Double angewendet werden. Und was wäre genau zu spät. Gut. Also, daher diese Lösung ist nicht die gewünschte, aber manchmal ganz sinnvoll, dass Sie wirklich über Klammern steuern können, wann was umgewandelt wird. Hier das wäre doppelt gemoppelt. Einmal Double davor würde auch reichen. Ich denke, damit haben Sie gesehen, was an Typenumwandlung aufwärts geht. Nun, gibt's auch eine Typenumwandlung abwärts? Ja, gibt es schon, vom Prinzip her. Man kann auch einen Doublewert zu einem Integer machen. Aber dann müssten Sie natürlich mit Datenverlust rechnen. Und das schauen wir uns auch mal kurz an. Wir haben noch einen Doublewert, das ist "zahl3" Und da machen wir mal 11.77 Und dann gehen wir hierhin, und machen einfach nun mal folgendes: Wir haben ja hier noch einen Integer "erg", wir legen nach "erg" einfach mal "zahl3" rein. Da muss unser Compiler eigentlich sofort schreien. Genau, das tut er jetzt auch. Ich hab kurz "Speichern" gedrückt und dann wird im Hintergrund immer kompiliert. Und dann sieht man automatisch, was für Fehler auftreten. Dann schreibt nämlich hier unser Compiler. Wir gehen mal hier mit der Maus über dieses Kreuzchen: Hier gibt es einen Verlust an Datengenauigkeit. Wir haben eine Double und versuchen die grade in eine Integer-Schublade reinzustecken. Und das geht schief. Also, keine automatischen Typenumwandlungen an der Stelle. Aber jetzt haben wir hier oben ja was gelernt. Wir können es erzwingen. Klammer davor und wir schreiben dahin: Wir wollen, dass zahl3 zum Integer wird. Wir speichern, der Fehler ist weg. Dass da natürlich jetzt Käse rauskommt, und statt 11.77 nach erg hinein dann 11 läuft, ist uns natürlich allen klar. Das heißt, wenn ich hier mal kurz erg ausgeben lasse, dann sehen wir einfach den Beweis. Dann kommt wirklich nur 11 raus. Das heißt, Sie dürfen es erzwingen, wenn Sie wollen. Es ist aber dann Ihnen überlassen, dass Sie natürlich da eine akute Rechenungenauigkeit bekommen. Und das ist es auch kein wirklich mathematisches Runden, denn eigentlich hätte er auf 12 aufrunden müssen. Er hat aber abgerundet. Er rundet immer Richtung 0. Das bedeutet, hier rundet er ab, weil 11 näher der 0 ist, als 11.77, beziehungsweise als 12. Hätten wir eine negative Zahl hier stehen, dann würde er auch wieder Richtung 0 runden. Nun gut. So viel also zum Casting automatisch oder per Hand.

Jetzt lerne ich Java 6

Steigen Sie ein in die Programmierung mit Java 6, lernen Sie die Grundlagen kennen und unternehmen Sie anschließend Ihre ersten Schritte in der objektorientierten Programmierung.

12 Std. 27 min (98 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!