Hallo Leute,
ich bearbeite eine Übung und möchte gerne euch was fragen.
Die Aufgabe lautet:
int x = 120; int y = 2; int z = 3;
a) (byte) 256 * 2147483648 =
b) 9f/3d =
c) "x" + y + z =
d) 1 + 3f =
e) x!= 'x' ? 2f : 1=
Ich muss angeben, mit welchen Datentyp es gecastet wird und was es für ein Ergebnis liefert.
Mein Ansatz ist so:
a) Hier wird gezwungenermaßen nach byte gecastet. Da aber der Wert zu groß ist, (weil byte einen Wertebereich von [-128 bis 127] hat, liefert dieser Ausdruck ein Fehler.
b) 9f/3d = 3.0f, weil 3d in Typ float gecastet wird. Die genaue Begründung weiss ich leider nicht :(
c) Hier bekommt man den Wert 23x raus, weil y und z zu Strings werden. Diese werden danach mit x verkettet sodass am Ende 23x bekommt.
d) Hier ganau wie bei b). Hier ist das Ergebnis 4.0f, weil der Typ double in float konvertiert wird. Begründung weiss ich nicht :(
e) Hier ist das Ergebnis 1.0f. Da x (120) ist gleich der char 'x' (Unicode: 120) und nicht ungleich, liefert dieser Ausdruck false. Dann wird die 1 in float zurückgegeben, weil bei primitiven Datentypen der Typ indentisch sein muss. Deshalb wird die 1 in float konvertiert, sodass man am Ende 1.0f bekommt.
Nun meine zwei Fragen:
Warum wird immer double in float konvertiert? Warum macht das Java?
Sind meine Ansätze bzw Ergebnisse richtig?
Vielen Dank im Voraus