2010-09-15 10 views
10

Ich bin neu in Java und Hintergrund von C. Ich gehe durch Khalid Moughal Buch. Auf Seite 126 er ein Beispiel, wieSequenzpunkt-Konzept in Java

int i = 10; 

    int k = ++i + --i; // ((++i) + (--i)). 

ab C Dieses eindeutig gegen die Sequenz Punkt Konzept gibt, die besagen, dass Sie nicht den Wert einer Variablen mehr als einmal mit in derselben Sequenz Punkt ändern können. Meine Frage ist die gleiche Sequenz Punkt Regel gilt in Java oder nicht? Es mag sein, dass er dieses Beispiel nur genommen hat, um das Konzept der Präfix unären Operator zu erklären und es ist Nebeneffekt, aber ein solches Beispiel, das offensichtlich eine sehr fundamentale Regel der Sprache verletzt, wird in einem so berühmten Buch wie Khalid Moughal nicht erwartet.

Bitte bestätigen Sie es.

Hoffen Sie, dass die Leute es in den richtigen Geist nehmen.

Danke,

Mawia

+2

C hat eine Menge Gepäck aus der Tatsache, dass es Dutzende von Compilern und Millionen von bestehenden Programmen gab, bevor der Standard geschrieben wurde, so dass sie den Standard so machen mussten, dass Programme, die von der So hat ein bestimmter Compiler Dinge optimiert. Außerdem war die Optimierung ziemlich primitiv, was das Schlüsselwort register erklärt, das es dem Programmierer ermöglicht, Mikrooptimierungen durchzuführen, die jeder vernünftige Compiler besser ausführen kann. –

Antwort

8

Meine Frage ist, tut die gleiche Sequenz-Punkte-Regel in Java gilt oder nicht?

Nein, in Java gibt es keine Sequenzpunkte. Reihenfolge der Auswertung (etc) ist in Java gut definiert.

Lesen Sie auch this Antwort.

+8

Auch wenn die Reihenfolge gut definiert ist, sollte beachtet werden, dass jeder, der einen solchen Code schreibt, seine Lizenz vor Ort widerrufen sollte ... – EFraim

+0

@EFraim: True! :) –

+0

Der zweite Link funktioniert nicht mehr. –

0

Nein, es gibt kein Konzept von Sequenzpunkten in Java und die Reihenfolge ist vollständig definiert. Im Allgemeinen werden Ausdrücke von links nach rechts ausgewertet. Für die formale Definition können Sie JLS, Abschnitt 15.7, über die Bewertungsreihenfolge lesen. Siehe this Link.