PDA

Visualizza la versione completa : operatore ++ in java


oiroi
26-03-2003, 16:58
Non riesco a spiegarmi il valore di g ottenuto con il seguente codice:
public class Shift{
1 static int i;
2 static int j;
3 public static void main(String argv[]){
4 int i = 2;
5 int j = 2;
6 int g=2;
7 int k;
8 j++;
9 k=i++;
10 g=g++;
System.out.println("j:"+j+" i:"+i+" g:"+g+" k:"+k);

}
}

output
j:3 i:3 g:2 k:2
Infatti ripetendo le operaszioni fatte per j, i, k al rigo 10
il valore di g (2) e' assegnato a se stesso poi incrementato e dovrebbe essere riassegnato a se stesso, ottenendo 3 (come fatto al rigo 9 per k e i: il valore di i=2 e' assegnato a k, poi e' incrementato e poi e' assegnato di nuovo ad i per ottenere 3)
Grazie

Luc@s
26-03-2003, 17:12
con [VAR]++ visualizzi e poi incrementi(utile nei for) con ++[VAR] incrementi e poi visualizzi ;)

oiroi
27-03-2003, 09:21
So che ++ anteposto alla variabile fa si che l'incremento avvenga prima della visualizzazione (o comunque della sua utilizzazione) mentre postposto prima visualizza e poi incrementa, ma la mia perplessita' non e' questa. il comportamento strano (o comunque che io non riesco a capire) se prima della riga 10 'g' vale 2, perche dopo la 10 vale ancora 2?; lo stesso non si ha per 'i' (ad esempio): prima della riga 9 vale 2 dopo vale (giustamente) 3.
Grazie.

l.golinelli
27-03-2003, 09:23
E' strano cmq g=g++ non ha senso... Scrivi g++;

:ciauz:

lelefante
27-03-2003, 14:09
Non sono sicuro ma:

penso che dipenda da dove viene memorizzato il valore della valutazione dell'espressione di destra.
Nella riga 10 g viene prima valutato, e poi incrementato. Tuttavia finita la valutazione un valore e' gia' disponibile, per cui questi viene assegnato alla variabile di sinistra, che e' proprio g. Quindi il valore 3 viene sovrascritto con quello valutato a sinistra, cioe' 2.

l.golinelli
27-03-2003, 14:27
Era la stessa impressione che avevo avuto io... Cmq secondo me č pių giusto scrivere solo g++;

:ciauz:

Loading