2010-03-04 14 views

risposta

14

i++ è un postincremento (JLS 15.14.2). Incrementa i, ma il risultato dell'espressione è il valore di iprima dello l'incremento. Assegnando questo valore a i in effetti, il valore di i rimane invariato.

scomposizione in questo modo:

int i = 0; 
int j = i++; 

E 'facile capire perché j == 0 in questo caso. Ora, invece di j, sostituiamo il lato sinistro con i. Il valore del lato destro è ancora 0, ed è per questo che ottieni lo i == 0 nel tuo snippet.

4

È destinato a fare questo:

int i = 0; 
i++; 
i++; 
i++; 
System.out.println(i); 

i++ fa in realtà un compito, quindi se si aggiunge un = basta confondere le cose. Questi altri bravi risponditori possono darti il ​​nocciolo duro, alcuni dettagli mi sfuggono. :)

0

prima cosa è non si dovrebbe scrivere questo tipo di codice ....

Ma se consideriamo per il bene domande allora questo semplice: ha a che fare con il modo in cui l'operatore postfix "ritorni" il valore. Un postfix ha la precedenza sull'operatore di assegnazione, ma l'operatore postfisso dopo aver incrementato il valore di i restituisce il valore precedente di i. Quindi vengo nuovamente assegnato al suo valore precedente.

E ancora una volta non usare questo costrutto nel codice come il prossimo programmatore che vede questo verrà dopo di voi (con qualcosa di grande nelle sue mani) :)

0

Let I=++, con un incremento, e A=i, un incarico. Sono non commutativi: IA != AI.

Sommario

IA = "first increase then assignment"

contro-esempio

$ javac Increment.java 
$ java Increment 
3 
$ cat Increment.java 
import java.util.*; 
import java.io.*; 

public class Increment { 
    public static void main(String[] args) { 
     int i=0; 
     i=++i; 
     i=++i; 
     i=++i; 
     System.out.println(i); 
    } 
} 

correlati

Problemi correlati