Seite 1 von 3

Java-Rätsel und Überraschungen ;)

Verfasst: Do Apr 18, 2013 8:17 pm
von nufan
Ich möchte hier ein paar kleine Java-Denkaufgaben sammeln.

Hier die erste:

Code: Alles auswählen

public class Test {

  public static void main(String[] args) {
    for(int i = 0, j = 0; Integer.valueOf(i) == Integer.valueOf(j); i++, j++) {
      System.out.println("num: " + i);
    }
  }

}
Wer erkennt die Ausgabe ohne das Programm auszuführen? :)

Re: Java-Rätsel und Überraschungen ;)

Verfasst: Do Apr 18, 2013 8:55 pm
von GilbertDur
Ich würde jetzt mal auf "num: 1" tippen, obwohl ich nicht weiß, ob man Integer.valueOf(i) == Integer.valueOf(j) als Bedingung in einer Schleife angeben kann. Falls ja müsste es sich hierbei dann doch eigentlich um eine Endlos-Schleife handeln?

Re: Java-Rätsel und Überraschungen ;)

Verfasst: Fr Apr 19, 2013 8:50 am
von Kerli
Ich bin mir nicht ganz sicher ob Integer.valueOf mit int funktioniert, aber ansonsten könnte es noch sein das nichts ausgegeben wird, da in Java soweit ich weiß der Vergleichsoperator Objektidentitäten (also eigentlich Zeiger^^) vergleicht und nicht die eigentlichen Werte. Da müsste man dann compare oder so verwenden.

Re: Java-Rätsel und Überraschungen ;)

Verfasst: Fr Apr 19, 2013 9:29 am
von nufan
GilbertDur hat geschrieben:Ich würde jetzt mal auf "num: 1" tippen
Wie kommst du bitte auf 1?! ^^
Kerli hat geschrieben:Ich bin mir nicht ganz sicher ob Integer.valueOf mit int funktioniert
Tut es, und es liefert eigentlich auch ein Objekt mit dem Wert den man erwarten würde.
Kerli hat geschrieben:aber ansonsten könnte es noch sein das nichts ausgegeben wird, da in Java soweit ich weiß der Vergleichsoperator Objektidentitäten (also eigentlich Zeiger^^) vergleicht und nicht die eigentlichen Werte.
Damit hast du nicht ganz unrecht, aber sieh dir mal die Ausgabe an ;)
Kerli hat geschrieben:Da müsste man dann compare oder so verwenden.
Ich schätze mal du meinst equals() ^^ compareTo() wäre theoretisch auch möglich, aber nicht notwendig.

Re: Java-Rätsel und Überraschungen ;)

Verfasst: Fr Apr 19, 2013 9:48 am
von Kerli
nufan hat geschrieben:Damit hast du nicht ganz unrecht, aber sieh dir mal die Ausgabe an ;)
Höchst eigenartig. Dummer Cache^^ Da sieht man was es bringt keine Objekte auf den Stack legen zu können :P
nufan hat geschrieben:Ich schätze mal du meinst equals() ^^ compareTo() wäre theoretisch auch möglich, aber nicht notwendig.
Vermutlich. Ich hab Java schon länger nicht mehr verwendet :)

Re: Java-Rätsel und Überraschungen ;)

Verfasst: Fr Apr 19, 2013 10:32 am
von Xin
Ich würde keine Ausgabe erwarten.

Zwei Möglichkeiten:
1.) Zwei Objekte mit == zu vergleichen, vergleicht evtl. die Referenzen, aber nicht die Instanzen.
2.) String + Integer klingt für mich ungesund... ich habe da mal was drüber geschrieben als Begrüdung, warum Java kacke ist... wenn 1) nicht zutrifft kommt da "Num " und das Zeichen 1, also keine "1", sondern halt 1... wenn das Ding bei 32 ankommt ein Leerzeichen, bei 65 ein "a"... usw.

Da 2) aber kacke ist, würde ich erwarten, dass das Ding gar nicht kompiliert. Tut es aber, deswegen auch meine schlechte Note im Java Kurs, als ich an einer Hochschule mit Java-Vorliebe so begründete, dass Java eben... kacke ist.

Re: Java-Rätsel und Überraschungen ;)

Verfasst: Fr Apr 19, 2013 11:18 am
von nufan
Kerli hat geschrieben:Ich hab Java schon länger nicht mehr verwendet :)
Glücklicher :P
Xin hat geschrieben:2.) String + Integer klingt für mich ungesund...

Warum String + Integer? Seit Java 1.5 gibt es auch ein valueOf() mit einem int als Parameter, falls du das meinst.
Xin hat geschrieben:wenn 1) nicht zutrifft kommt da "Num " und das Zeichen 1, also keine "1", sondern halt 1... wenn das Ding bei 32 ankommt ein Leerzeichen, bei 65 ein "a"... usw.
Gleiche Frage wie ein paar Beiträge darüber: Wieso bitte 1?! ^^ Ich verstehe auf was du hinaus willst, aber dann beginnt das ganze wenn überhaupt 0 ^^ So ist es aber nicht ;)

Re: Java-Rätsel und Überraschungen ;)

Verfasst: Fr Apr 19, 2013 11:27 am
von Xin
nufan hat geschrieben:
Xin hat geschrieben:2.) String + Integer klingt für mich ungesund...

Warum String + Integer? Seit Java 1.5 gibt es auch ein valueOf() mit einem int als Parameter, falls du das meinst.
Nö, ich meine "Num"+i. Links String, recht i.
Eine Addition von Text und Wert ergibt in meinen Augen semantisch einfach keinen Sinn.
nufan hat geschrieben:
Xin hat geschrieben:wenn 1) nicht zutrifft kommt da "Num " und das Zeichen 1, also keine "1", sondern halt 1... wenn das Ding bei 32 ankommt ein Leerzeichen, bei 65 ein "a"... usw.
Gleiche Frage wie ein paar Beiträge darüber: Wieso bitte 1?! ^^ Ich verstehe auf was du hinaus willst, aber dann beginnt das ganze wenn überhaupt 0 ^^ So ist es aber nicht ;)
Ähh... ja... es beginnt bei 0... ^^

Aber so ist es nicht, auch wenn es bei 0 beginnt?

Ansonsten sagt mir der Quelltext auch nix mehr an möglichen Ungereimtheiten, die sich mit Java erklären ließen.

Re: Java-Rätsel und Überraschungen ;)

Verfasst: Fr Apr 19, 2013 11:30 am
von nufan
Xin hat geschrieben:
nufan hat geschrieben:
Xin hat geschrieben:2.) String + Integer klingt für mich ungesund...

Warum String + Integer? Seit Java 1.5 gibt es auch ein valueOf() mit einem int als Parameter, falls du das meinst.
Nö, ich meine "Num"+i. Links String, recht i.
Eine Addition von Text und Wert ergibt in meinen Augen semantisch einfach keinen Sinn.
Zugegeben das ist etwas komisch, aber es funktioniert. Du kannst das "+ i" auch gerne weglassen, es geht vor allem darum wie oft die Schleife durchläuft.
Xin hat geschrieben:Aber so ist es nicht, auch wenn es bei 0 beginnt?
Nein, so ist es nicht ^^
Xin hat geschrieben:Ansonsten sagt mir der Quelltext auch nix mehr an möglichen Ungereimtheiten, die sich mit Java erklären ließen.
Du kannst das Programm ja mal starten und dich überraschen lassen ;)

Re: Java-Rätsel und Überraschungen ;)

Verfasst: Fr Apr 19, 2013 11:44 am
von Kerli