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

Java 7 Grundkurs

Typumwandlung (casting)

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
In der Praxis sind natürlich nicht alle Variablen vom selben Typ. Deshalb müssen wir bei Zuweisungen von Variablen, an denen verschiedenen Typen beteiligt sind, Typumwandlungen vornehmen und dabei gilt es einiges zu beachten.
05:30

Transkript

In Java gibt es ja verschiedene primitive Datentypen und in einer Anwendung werden eher selten alle Variablen vom selben Typ sein. Möchten wir nun Zuweisungen vornehmen, bei denen Variablen verschiedenen Typs beteiligt sind, dann müssen wir Typumwandlungen vornehmen. Um das zu demonstrieren, lege ich jetzt mal zwei verschiedene Variablen von verschiedenen Typen an. Erst mal eine int-Variable und dann noch eine long-Variable. Nun kann ich beiden noch irgendwelche Werte zuweisen, z. B. so. Und nun kommt eine Zuweisung, an der beide Variablen beteiligt sind. Und zwar weise ich das, was in "Zahl" steht jetzt der "großen Zahl" zu. Das funktioniert offensichtlich problemlos, es gibt keine rote Kringellinie, also auch kein Compilerfehler. Trotzdem findet hier hinter den Kulissen eine Typumwandlung statt. "Zahl" ist vom Typ "int", "große Zahl" ist vom Typ "long", der Wert, der "Zahl" steht, wird jetzt von "int" auf "long" aufgebohrt und dann "großer Zahl" zugewiesen. Für diese Typumwandlung müssen wir nichts weiter tun, das kann der Compiler alleine. Das ist eine sog. implizite Typumwandlung. Jetzt probieren wir das mal andersrum. Also "Zahl" ergibt sich aus "großer Zahl". Da bekommen wir jetzt die rote Kringellinie, also offensichtlich stimmt da irgendwas nicht. Der Compiler schaut hier niemals nach den konkreten Werten der Variablen zur Laufzeit, sondern einfach nur nach dem Typ, und der sagt, "große Zahl" ist vom Typ "long" und da könnte eine Zahl drin sein, die dann nicht in "Zahl" reinpassen würde, weil "Zahl" ist nur vom Typ "int". Deshalb bekommen wir hier auch eine Compilerfehlermeldung. Die heißt dann "possible loss of precision", also evtl. fehlt dann was. Wenn wir so etwas in einem Programm mal haben und wenn wir uns auch sicher sein können, dass die Zahl klein genug ist, damit sie auf der linke Seite reinpasst, dann können wir hier eine explizite Typumwandlung einbauen. NetBeans schlägt mir das hier auch vor. Ich klicke da mal drauf. Das heißt, wir schreiben einfach den neuen Typ in Klammern davor. Nun wird von der long-Zahl einfach die obere Hälfte abgeschnitten und das, was übrig bleibt, passt jetzt problemlos in die int-Zahl hinein. Ohne eine solche Typumwandlung kommen wir nicht an der Typprüfung des Compilers vorbei. Mit dieser Typumwandlung deaktivieren wir sie temporär, wir sagen dem Compiler also: "Ja, hör mal zu, ich weiß, was ich tue." Das Ganze funktioniert natürlich nur, wenn die Typen grundsätzlich kompatibel sind, d. h., damit ich etwas auf "int" casten kann, typumwandeln kann, muss wenigstens irgendein numerischer Typ sein, der dahinter folgt. Es dürfte also nicht z. B. ein String sein oder eine Boolesche Variable. Boolesche Variablen lassen sich überhaupt in gar nichts anderes umwandeln als in Boolesche Variablen. Die numerischen Typen kann ich aber alle munter hin und her umwandeln, wie ich das möchte. Natürlich immer mit der Maßgabe, dass ich weiß, was ich tue. Was mit "int" und "long" funktioniert, funktioniert also auch mit z. B. "float" und "double". Also "float f = 3.1", muss ich natürlich ein "f" dahinter setzen, sonst wäre es ein "double"-Wert, der nicht in die "float"-Variable hineinpassen würde und dann lege ich mir noch eine Double-Variable an, "double d = 4.345". Da muss ich kein "d" dahinter setzen, auch wenn ich das könnte, weil Variablen mit einem Komma drin, sind immer vom Typ "double". Auch hier testen wir wieder die Zuweisung in beide Richtungen. Erst mal "d = f". Das funktioniert problemlos, weil "double" ist größer als "float", der Wert passt also problemlos rein und in die Gegenrichtung, "f = d", klappt das natürlich nicht. Da muss ich wieder eine explizite Typumwandlung einbauen, einen expliziten Cast auf "float". So, jetzt haben wir das innerhalb der ganzen Zahlen probiert und innerhalb der Kommazahlen. Machen wir noch Typumwandlungen zwischen den beiden Welten. Versuchen wir mal, unserer double-Variablen den Wert von "Zahl" zuzuweisen. Wir sehen, es funktioniert. Von ganzer Zahl zu Kommazahl käme ja höchstens was dazu, nämlich das, was nach dem Komma kommt, also haben wir hier keine Platzprobleme. In die Gegenrichtung hingegen natürlich sehr wohl. Auch hier schaut der Compiler wieder nur auf die Typen und nicht auf die tatsächlichen Werte. Eine double-Zahl könnte Nachkommastellen enthalten und die hätten keinen Platz in der ganzen Zahl, also sagt er hier wieder: "Possible loss of precision". Auch hier muss ich also wieder einen expliziten Cast einfügen, das mache ich mit zwei Mausklicks. In diesem Fall wird nun also, alles was nach dem Komma kommt, abgeschnitten. Da gibt es keinen großen Aufwand hinter den Kulissen, da wird nichts gerundet oder so, sondern es wird einfach nur weggenommen, was hinter dem Komma steht und das, was übrig bleibt, also die ganze Zahl vor dem Komma, das wird dann der int-Variablen zugewiesen. Sie haben nun also gesehen, Typumwandlung von kleinem Typ zu großem Typ geht problemlos, aber von einem größeren oder kommabehafteten zu einem kleineren oder ohne Komma, da muss ich immer eine explizite Typumwandlung hinzufügen, indem ich den gewünschten Typ in Klammern davor schreibe.

Java 7 Grundkurs

Machen Sie sich mit den Grundlagen der Java-Programmierung vertraut und lernen Sie die Syntax der Sprache sowie das Konzept der objektorientierten Softwareentwicklung kennen.

8 Std. 32 min (66 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!