2010-09-15 15 views
10

Sono nuovo di Java e ho uno sfondo di C. Sto passando per il libro di Khalid Moughal. A pagina 126 si dà un esempio comeconcetto di punto di sequenza in java

int i = 10; 

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

Questo viola chiaramente il punto di concept sequenza come di C, che dice che non è possibile modificare il valore di una variabile più di una volta con in stesso punto sequenza. La mia domanda è: la stessa regola del punto di sequenza si applica in java o no? Può darsi che abbia preso questo esempio solo per spiegare il concetto di operatore prefisso unario ed è un effetto collaterale ma un tale esempio che viola chiaramente una regola fondamentale della lingua non è previsto in un libro così famoso come Khalid Moughal.

Quindi si prega di confermare.

Spero che le persone lo prendano nel giusto spirito.

Grazie,

Mawia

+2

C ha un sacco di bagaglio dal fatto che c'erano dozzine di compilatori e milioni di programmi esistenti prima che lo standard fosse scritto, quindi dovevano fare lo standard in modo tale da non rompere i programmi che dipendevano dal in che modo un particolare compilatore ha ottimizzato le cose. Inoltre, l'ottimizzazione era piuttosto primitiva, il che spiega la parola chiave 'register' che consente al programmatore di eseguire micro-ottimizzazioni che qualsiasi compilatore decente può fare meglio. –

risposta

8

La mia domanda è fa la stessa regola si applica punto sequenza in java o no?

No, non ci sono punti di sequenza in Java. L'ordine di valutazione (ecc.) È ben definito in Java.

Leggere anche la risposta this.

+8

Anche se l'ordine è ben definito, va notato che chiunque insegni a scrivere codice come questo dovrebbe avere la sua licenza revocata in loco ... – EFraim

+0

@EFraim: True! :) –

+0

Il secondo link non funziona più. –

0

No, non vi è alcun concetto di punti di sequenza in java e l'ordine di è completamente definito. In generale, le espressioni vengono valutate da sinistra a destra. Per la definizione formale, è possibile leggere JLS, sezione 15.7 sull'ordine di valutazione. Vedere il collegamento this.