Java ergebnis Tabelle?

4 Antworten

  • ('a' == 'b') == false
  • ("text" == "Text") == false
  • ("ab" != "cd") == true
  • ('Q' == 'q') == false
  • ((11 <= (22 / 2)) == true

Wobei man Strings ohnehin nicht mit == vergleicht, weil das die Referenzen und nicht den Inhalt vergleicht! Aber wenn die Strings inhaltlich verschieden sind, dann können auch die Referenzen nicht gleich sein. Es können aber Strings unterschiedliche Referenzen sein, obwohl sie inhaltlich gleich sind. (Es können aber auch die selben sein.) Das heißt, ein Ausdruck wie ("a" == "a") kann, abhängig von (unter anderem) "Interna des Compilers und der JVM", sowohl true, als auch false ergeben.

Spannender sind die gemischten Float- und Integer-Terme, weil dort die Frage ist, ob eine Floating-Point-Division oder eine Integer-Division stattfindet.

10 / 4 == 2, aber 10.0 / 4.0 == 2.5

Macht er bei (10 / 4) * 2.0 eine Floating-Point-Division, weil der Term auch Gleitkommazahlen enthält und das von der Typhierarchie her ein "widening" wäre, oder macht er zunächst eine Integer-Division (weil beide Operanden des Divisionsoperators ja Integer sind) und konvertiert erst danach in eine Gleitkommazahl, um die Multiplikation durchführen zu können (weil hier ja ein Operand eine Gleitkommazahl ist)?

Da müsste ich selbst in die Spezifikation schauen oder es ausprobieren. Sicherheitshalber würde ich in solchen Fällen lieber explizit casten. Es gibt auch Sprachen, die strikter sind und in einem arithmetischen Term keine unterschiedlichen Typen für die verschiedenen Operanden erlauben. (Go zum Beispiel.) Dann muss man immer explizit casten. Finde ich persönlich besser, weil es keine Überraschungen gibt, weder beim Schreiben des Codes (wenn man einen Cast vergisst, gibt es einen Compilerfehler), noch später beim Lesen, weil die Casts ja alle explizit dran stehen (müssen).

Boolean ist der Wahrheitswert (0 entspricht false und 1 entspricht true).

== steht bei logischen Ausdrücken für "ist gleich".
!= für "ist ungleich".
<= bzw. >= "kleiner gleich/größer gleich"

Du sollst also nur entscheiden, ob die Aussagen in Spalte 1 wahr oder falsch sind.

Am einfachsten kannst du es einfach ausprobieren:

public class TypeTest {
    public static void main(String[] args) {
        System.out.println(23.4 + 7);
        System.out.println(getType(23.4 + 7));

        System.out.println(30 - 5);
        System.out.println(getType(30 - 5));

        System.out.println((10 / 3) + 0.5);
        System.out.println(getType((10 / 3) + 0.5));

        System.out.println('a' == 'b');
        System.out.println(getType('a' == 'b'));

        System.out.println("text" == "Text");
        System.out.println(getType("text" == "Text"));

        System.out.println("Pro" + "gramm");
        System.out.println(getType("Pro" + "gramm"));

        System.out.println("ab" != "cd");
        System.out.println(getType("ab" != "cd"));

        System.out.println(6.6 / 3.3);
        System.out.println(getType(6.6 / 3.3));

        System.out.println((10 / 4) == 2);
        System.out.println(getType((10 / 4) == 2));

        System.out.println((1 / 3) * 1234567891234L); // Ohne das L am Ende kann Java die Zahl nicht compilieren
        System.out.println(getType((1 / 3) * 1234567891234L));

        System.out.println('Q' == 'q');
        System.out.println(getType('Q' == 'q'));

        System.out.println(("Progr" + "amm") == "Program");
        System.out.println(getType(("Progr" + "amm") == "Program"));

        System.out.println(11 <= (22/2));
        System.out.println(getType(11 <= (22/2)));
    }

    // Man braucht für jeden primitiven Typ eine eigene Funktion
    private static String getType(int value) {return "int";}
    private static String getType(boolean value) {return "boolean";}
    private static String getType(long value) {return "long";}
    private static String getType(short value) {return "short";}
    private static String getType(float value) {return "float";}
    private static String getType(double value) {return "double";}
    private static String getType(char value) {return "char";}
    private static String getType(byte value) {return "byte";}
    private static String getType(Object value) {return value.getClass().getSimpleName();}
}

Ergebnis:

30.4 double

25 int

3.5 double

false boolean

false boolean

Programm String

true boolean

2.0 double

true boolean

0 long

false boolean

false boolean

true boolean

Also die boolean-Werte sind so, wie NoHumanBeing es schon gesagt hat, aber bei den anderen hast du noch ein paar falsche Ergebnistypen und Ergebnisse. Am überraschendsten dürften wahrscheinlich die Ergebnisse der gemischten int- und double Rechnungen oder auch die gemischte int- und long Rechnung sein.

(10 / 3) + 0.5 = 3 (int-division) + 0.5 = 3.5
(1 / 3) * 1234567891234L = 0 (int-division) * 1234567891234 = 0

Bei der unteren Rechnung muss ich noch dazu sagen, dass Java die Zahl gar nicht kompilieren kann, wenn man nicht das L hintendran schreibt. Das L bedeutet, dass es eine long-Zahl ist, also 8-Byte anstatt 4-Byte. Wenn man es genau so eingibt, wie in der Aufgabe, wird also einfach ein Fehler angezeigt und es gibt keinen Rückgabewert.