0 Daumen
630 Aufrufe

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

Avatar von

1 Antwort

+1 Daumen
 
Beste Antwort

class convert {
public static void main(String[] args) {
  int x = 120; int y = 2; int z = 3;
    System.out.println(getType((byte) 256 * 1) + " " + ((byte) 256 * 1));
    System.out.println(getType(9f/3d) + " " + (9f/3d));
    System.out.println(getType("x" + y + z) + " " + ("x" + y + z));
    System.out.println(getType(1 + 3f) + " " + (1 + 3f));
    System.out.println(getType(x!= 'x' ? 2f : 1) + " " + (x!= 'x' ? 2f : 1));
}

public static String getType(byte x) {
return "byte";
}
public static String getType(short x) {
return "short";
}
public static String getType(int x) {
return "int";
}
public static String getType(long x) {
return "long";
}
public static String getType(float x) {
return "float";
}
public static String getType(double x) {
return "double";
}
public static String getType(boolean x) {
return "boolean";
}
public static String getType(char x) {
return "char";
}
public static String getType(String x) {
return "String";
}
}

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. 

Der Fehler ist, dass 2147483648 zu groß für ein int ist.

Warum wird immer double in float konvertiert?

Wird es nicht. Stattdessen wird float zu double konvertiert, weil das eine sogenannte widening conversion ist. Wenn du die nicht haben willst, dann musst du explizit nach float konvertieren.

Avatar von 5,7 k

Vielen Dank. Ich wusste nicht das Java das zeigen kann. :o

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community