2013-07-24 18 views
6

任何人都可以解釋爲什麼這樣的調用不會增加我的i值嗎?在方法調用期間賦值並遞增值

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

離開i=0,而不是增加一個至少使得在第二叫它爲1

+0

'i = i ++'沒有任何意義,因爲'i ++'確實編輯了'i'的值 – BackSlash

+1

你實際上想寫的是'list.get(7 + i ++)' –

回答

7

i = i++就像是這樣做的:

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

什麼是實際發生的情況是,i++值的i增量發生之前的值,然後i將獲得.. i值。

在一行i++將使用舊值i然後它會增加它。

4

i = i++分配第一和第二增量

繼承人什麼本質上的執行看起來像:

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將首先增加變量並指定第二個

+0

「++我會先將變量加1並分配第二個「爲什麼對於i =(++ i)編譯器給我一個警告:「賦值給變量i沒有任何影響」? – xwhyz

+1

,因爲它不會起作用。這是一種冗餘,因爲我在後綴遞增期間(++ i)分配了遞增的值。你只需要list.get(7 +(++ i)); – sunrize920

1

i = i++意味着i將被分配的i舊值,然後將1。如果你想真正增加你的價值遞增,你應該寫兩種:

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

或:

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