2013-07-24 15 views
6

Có ai có thể giải thích cho tôi tại sao cuộc gọi đó không tăng giá trị i của tôi không?Chỉ định và tăng giá trị trong khi gọi phương thức

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

nó lá i=0 thay vì tăng bởi một ít như vậy trong lần thứ hai gọi nó là 1.

+0

'i = i ++' không có ý nghĩa, vì 'i ++' không sửa giá trị 'i' – BackSlash

+1

Điều bạn thực sự muốn viết là' list.get (7 + i ++) ' –

Trả lời

7

i = i++ cũng giống như thực hiện:

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

gì đang thực sự xảy ra là giá trị của i++ là giá trị của itrước thặng dư xảy ra, sau đó i sẽ nhận được giá trị của .. i.

Trong một dòng i++ sẽ sử dụng giá trị cũ của i và sau đó nó sẽ tăng nó.

4

i = i++ gán đầu tiên và thứ hai increments

heres những gì thực hiện về cơ bản trông giống như:

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 sẽ tăng biến trước và gán thứ hai

+0

" ++ i sẽ tăng biến trước và chỉ định thứ hai "vậy tại sao cho i = (++ i) trình biên dịch cho tôi một cảnh báo: "Việc gán cho biến i không có hiệu lực"? – xwhyz

+1

bởi vì nó sẽ không có hiệu lực. Nó là một dự phòng vì tôi được gán giá trị gia tăng trong khi tăng thêm postfix (++ i). Bạn chỉ cần list.get (7 + (++ i)); – sunrize920

1

i = i++ nghĩa là i sẽ được gán giá trị cũ của i mà sau đó sẽ được tăng thêm 1. Nếu bạn muốn thực sự tăng giá trị của bạn, bạn nên viết một trong hai:

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

hay:

int i = 0; 
list.get(7 + (i+1)); 
list.get(7 + (i+2)); 
Các vấn đề liên quan