Datentypen Wrapperklassen

Status
Nicht offen für weitere Antworten.

Klaus2002

Mitglied
Hallo

ich versuche mich gerade in Wrapperklassen einzuarbeiten

Java:
 char c = '2';
 Integer ci = new Integer( c );
 System.out.println("Konvertieren char in int:" + c + "-->" + ci);

 int i = 11;
 Long il = new Long ( i );
 System.out.println("Konvertieren int in long:" + i + "-->" + il);

 int ii = 23;
 Float iif = new Float ( ii );
 System.out.println("Konvertieren int in float:" + ii + "-->" + iif);

 long ll = 222;
 Double lld = new Double ( ll );
 System.out.println("Konvertieren long in double:" + ll + "-->" + lld);

 char cc = '4';
 Float ccf = new Float ( cc );
 System.out.println("Konvertieren char in float:" + cc + "-->" + ccf);

 float f = 52.34f;
 Double fd = new Double  ( f );
 System.out.println("Konvertieren float in double:" + f + "-->" + fd);
Dabei erfolgt eine Umwandlung. Also bis dahin kein Problem.

Java:
 long l = 123L;
 Short ls = new Short ( l );
 System.out.println("Konvertieren long in short:" + l + "-->" + ls);

 double d = 74.0;
 Long dl = new Long ( d );
 System.out.println("Konvertieren double in long:" + d + "-->" + dl);
Warum treten aber hier nun Fehler auf? Die Zahlen sollten doch in den Wertebereich passen.
 

Michael...

Top Contributor
Java:
 long l = 123L;
 Short ls = new Short ( l );
 System.out.println("Konvertieren long in short:" + l + "-->" + ls);

 double d = 74.0;
 Long dl = new Long ( d );
 System.out.println("Konvertieren double in long:" + d + "-->" + dl);
Warum treten aber hier nun Fehler auf? Die Zahlen sollten doch in den Wertebereich passen.
Da tritt kein Fehler auf, das lässt sich nicht complieren, da solche Konstruktoren für Short und Long nicht definiert sind.
 

Das AlgoTool

Mitglied
Was du kennengelernt hast, ist der Unterschied zwischen widening und narrowing Conversions.
Die Wrapperklassen haben sowieso nur wenige Konstruktoren. Beispiel Float: Float (Java Platform SE 6)
Das Problem, das du bemerkt hast, tritt schon bei primitiven Datentypen auf.
Bildlich gesprochen: Eine Salami (int) in eine Turnhalle (double) werfen ist kein Problem. Ein Kamel (long) durch ein Nadelöhr (short) zu fädeln, erfordert hingegen einige Überredungskunst, namentlich einen Typecast, mit dem du ankündigst, dass du dir bewusst bist, dabei 48 Bit zu verlieren.
 

Klaus2002

Mitglied
Ich dachte Wrapperklassen kann man als Ersatz von Typecast betrachten.

Im ersten Beispiel kann ich doch ein long in ein double umwandeln. Warum kann ich dann aber nicht auch ein long in ein short (natürlich unter Berücksichtigung des Wertebereiches) umwandeln.

Da ist doch die JAVA-Denkweise inkonsequent.

Das gleiche nicht durchgehende Verhalten tritt ja auch umgekehrt auf. Int in log ist kein Problem aber double in long geht nicht.

Warum nur?
 

Michael...

Top Contributor
Warum kann ich dann aber nicht auch ein long in ein short (natürlich unter Berücksichtigung des Wertebereiches) umwandeln.
...
Int in log ist kein Problem aber double in long geht nicht.
In beiden Fälle würde eine Konvertierung ohne genauere Analyse der ursprünglichen Daten zu potentiellen Informations bzw. Genauigkeitsverlusten führen.
 

Klaus2002

Mitglied
In beiden Fälle würde eine Konvertierung ohne genauere Analyse der ursprünglichen Daten zu potentiellen Informations bzw. Genauigkeitsverlusten führen.

Genau das ist ja das Problem. In beiden Fällen würde eine Umwandlung zu Genauigkeitsverlust führen. Trotzdem gibt es eine Klasse die long in double umwandelt, dann könnte es doch auch eine geben die long in short umwandelt. Natürlich ist der Wertebereich bei short kleiner als bei double, und die damit möglichen Inkompatibilitäten größer. Ich dachte Java ist sehr stringent im Verhalten.
 

Landei

Top Contributor
Die Wrapper-Klassen sind alles andere als Ersatz für casts, sie erlauben Zahlen dort zu verwenden, wo Objekte und keine Primitive erwartet werden (z.B. bei Collections).

Übrigens solltest du immer die valueOf Methoden statt den Konstruktoren verwenden (oder es gleich dem Autoboxing/Unboxing überlassen). Füllst du ein Array mit new Integer(42), hast du soviel Objekte wie das Array lang ist, verwendest du Integer.valueOf(42), hast du genau ein Objekt.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben