2013-07-24 15 views
6

Czy ktoś może mi wyjaśnić, dlaczego takie połączenie nie zwiększa mojej wartości i?Przypisywanie i zwiększanie wartości podczas wywołania metody

int i = 0; 
list.get(7 + (i = i++)); 
list.get(7 + (i = i++)); 

pozostawia i=0 zamiast przyrostu przez co najmniej jeden taki, że w drugim nazwać to 1.

+0

'i = i ++' nie ma sensu, ponieważ 'i ++' edytuje 'i' wartość – BackSlash

+1

To, co faktycznie chciałeś napisać, to' list.get (7 + i ++) ' –

Odpowiedz

7

i = i++ jest jak robi:

int old_i = i; 
i = i + 1; 
i = old_i; 

Co się rzeczywiście dzieje, że wartość i++ jest wartość iprzed przyrost nastąpi, wówczas i dostanie wartości .. i.

w jednej linii i++ użyje wartość stary od i a następnie będzie ją zwiększyć.

4

i = i++ przypisuje przede sekundowych odstępach

herezje co wykonanie zasadniczo wygląda następująco:

list.get(7 + (i = i)); //list.get(7); 
i = i + 1; //i = 1 
list.get(7 + (i = i); //list.get(8); 
i = i + 1; //i = 2 

++i najpierw zwiększy zmienną i wyznaczy drugą

+0

" ++ I zwiększy najpierw zmienną i przypisz drugie "więc dlaczego dla i = (++ i) kompilator ostrzega mnie: "Przypisanie zmiennej i nie ma żadnego efektu"? – xwhyz

+1

, ponieważ nie będzie to miało żadnego efektu. Jest to nadmiarowość, ponieważ podczas przyrostu przyrostowego przypisywana jest wartość inkrementowana (++ i). Po prostu potrzebujesz list.get (7 + (++ i)); – sunrize920

1

i = i++ oznacza, że ​​i zostaną przypisane starą wartość i który następnie zostanie zwiększony o 1. Jeśli chcesz naprawdę zwiększyć swoją wartość, należy napisać albo:

int i = 0; 
list.get(7 + (i++)); 
list.get(7 + (i++)); 

czyli

int i = 0; 
list.get(7 + (i+1)); 
list.get(7 + (i+2));