2010-03-04 23 views

Trả lời

14

i++ là postincrement (JLS 15.14.2). Nó tăng i, nhưng kết quả của biểu thức là giá trị của itrước số số gia tăng. Gán giá trị này trở lại i có hiệu lực giữ giá trị i không thay đổi.

Phá vỡ nó xuống như thế này:

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

Thật dễ dàng để xem lý do tại sao j == 0 trong trường hợp này. Bây giờ, thay vì j, chúng tôi thay thế phía bên tay trái bằng i. Giá trị bên tay phải vẫn là 0 và đó là lý do bạn nhận được i == 0 trong đoạn mã của mình.

4

Bạn có nghĩa là để làm điều này:

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

i++ thực sự thực hiện một bài tập vì vậy nếu bạn thêm một = bạn chỉ cần nhầm lẫn điều này. Những người phản ứng tốt đẹp khác có thể cho bạn sự thô lỗ nặng nề, một số chi tiết của nó thoát khỏi tôi. :)

0

Điều đầu tiên là bạn không nên viết loại code này ....

Nhưng nếu chúng ta xem xét cho những câu hỏi vì lợi ích thì đây đơn giản: Nó đã làm với cách điều hành postfix "Thu nhập" giá trị. Một postfix có ưu tiên hơn toán tử gán, nhưng toán tử postfix sau khi tăng giá trị của i trả về giá trị trước đó của i. Vì vậy, tôi lại được gán cho giá trị trước đó của nó.

Và một lần nữa không sử dụng cấu trúc này trong mã của bạn như các lập trình viên tiếp theo ai nhìn thấy điều này sẽ đến sau khi bạn (với một cái gì đó lớn trong tay) :)

0

Hãy I=++, tăng, và A=i, một bài tập. Chúng không giao hoán: IA != AI.

Tóm tắt

IA = "first increase then assignment"

Counter-Ví dụ

$ 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); 
    } 
} 

liên quan

Các vấn đề liên quan