Java for(;;); Bedeutung

- keine Abbruchbedingung
- kein Zähler
- nix, was den Zähler verändert.

Das ist eine Endlosschleife.
 
Das ist eine einfache Endlosschleife, da keine Startanweisung, keine Abbruchbedingung und keine Iterationsanweisung.
Man könnte auch "while (true)" schreiben
 
hm thks

das dachte ich auch zuerst
aber da es keinen Sinn macht, da eine Endlosschleife zu machen, dachte ich das ist was anderes
 
iDont_Know schrieb:
hm thks

das dachte ich auch zuerst
aber da es keinen Sinn macht, da eine Endlosschleife zu machen, dachte ich das ist was anderes

doch macht es. es macht sogar nur diesen einen einzigen sinn: es ist ein schlechter ersatz für das warten auf einen tastendruck.

das programm soll bimmeln bis der nutzer strg+c in der konsole drückt.
 
Nicht alles, was nach Endlosschleife aussieht, ist auch eine. Irgendwo kann ja immer noch eine Entsprechung von break/continue drin sein.
 
Der Code ist aber eindeutig eine Endlosschleife, da gibt es nichts dran zu rütteln. Für ein break oder ontinue ist auf Grund des abschließenden Semikolons immerhin kein Platz mehr.
 
Der Code ist aber eindeutig eine Endlosschleife, da gibt es nichts dran zu rütteln. Für ein break oder ontinue ist auf Grund des abschließenden Semikolons immerhin kein Platz mehr.

da stimme ich mit meinen miesen Java Kentnissen zu :)
 
warum benutzen die nicht einfach while(true) für ne endlosschleife, sondern das eher unbekanntere for(;;)-Konstrukt?
 
Weil es am Ende des Tages einfach eine Frage der persönlichen Vorliebe ist und der Compiler ja wohl hoffentlich für beides den selben Code erzeugt.
 
nik_ schrieb:
warum benutzen die nicht einfach while(true) für ne endlosschleife, sondern das eher unbekanntere for(;;)-Konstrukt?
Die for-Schleife ist performance-technisch schneller als die while-Schleife. [1]
 
bzgl performance.

startet gleichzeitig zwei threads, einer mit ner for schleife, der andere mit ner while die bis 10000000000 zählen und 1+1 berechnen. zeit stoppen bis der thread zu ende ist und angucken welcher thread schneller war.
 
Yeah und der Threading-Overhead wird jegliche Messung kaputt machen, ein von vornerein per-Design gescheiteter Benchmark.

Der JVM wird eh egal sein, was du schreibst. Die wird - genauso wie ein guter C-Compiler - aus beiden einfach das gleiche Konstrukt erzeugen. Das werden einfach nur Noop-Operation.
 
der threading-overhead würde das also kaputt machen, wäre mir neu. zu mal wir auch bei nem echtzeit-system mit java programmierung über threads daten auslesen und zeiten stoppen...
 
Ich finde den Code irgendwie witzig.
Wenn er keine Startbedingung hat - nach welcher formalen Logik soll FOR denn tatsächlich starten? Oder anders - Start = Ende, das müsste die Schleife sofort wieder beenden.
CN8
 
@cumulonimbus8: Eine for-Schleife hat keine Startbedingung, sondern nur eine Endbedingung/Abbruchbedingung:
Code:
for (INITIALIZATION; CONDITION; AFTERTHOUGHT) {
    // Code for the for loop's body
    // goes here.
}
The initialization declares (and perhaps assigns to) any variables required. The condition checks a condition, and quits the loop if false. The afterthought is performed exactly once every time the loop ends and then repeats.
Die Schleife bricht also nur dann ab, wenn CONDITION false ist und sollte man gar nichts für CONDITION angeben, dann gibt es auch keine Abbruchbedingung, weshalb die Schleife ewig läuft. Macht doch Sinn, oder?

Hier zum selber Nachlesen: For loop

Gruß
BlackMark
 
Warum testen, wenn man sich den Java Bytecode einfach ansehen kann?
Zwei unterschiedliche Endlosschleifen, die jeweils i inkrementieren:
Code:
 // Method descriptor #15 (I)V
  // Stack: 0, Locals: 2
  public void whileLoop(int i);
    0  iinc 1 1 [i]
    3  goto 0
      Line numbers:
        [pc: 0, line: 8]
      Local variable table:
        [pc: 0, pc: 6] local: this index: 0 type: Loop
        [pc: 0, pc: 6] local: i index: 1 type: int
      Stack map table: number of frames 1
        [pc: 0, same]
  
  // Method descriptor #15 (I)V
  // Stack: 0, Locals: 2
  public void forLoop(int i);
    0  iinc 1 1 [i]
    3  goto 0
      Line numbers:
        [pc: 0, line: 12]
      Local variable table:
        [pc: 0, pc: 6] local: this index: 0 type: Loop
        [pc: 0, pc: 6] local: i index: 1 type: int
      Stack map table: number of frames 1
        [pc: 0, same]
 
Zurück
Oben