Tôi chỉ muốn tạo ra một chút Java-Puzzle, nhưng tôi bối rối bản thân mình. Một phần của câu đố là:Pre- và postincrement trong Java
Gì đoạn mã sau đây làm:
public class test {
public static void main(String[] args) {
int i = 1;
i += ++i + i++ + ++i;
System.out.println("i = " + i);
}
}
Nó ra 9
.
My (ít nhất là một phần) sai giải thích:
Tôi không khá chắc chắn, nhưng tôi nghĩ rằng thuật ngữ sau i +=
được đánh giá như thế này:
Vì vậy
int i = 1;
i += ++i + i++ + ++i;
giống với
int i = 1;
i += ((++i) + (i++)) + (++i);
Điều này được đánh giá từ trái sang phải (Xem Pre and postincrement java evaluation).
Số tiền ++i
đầu tiên i
đến 2
và trả lại 2
. Vì vậy, bạn có:
i = 2;
i += (2 + (i++)) + (++i);
Các i++
lợi nhuận 2
, vì nó là giá trị mới của i
, và gia tăng i
-3
:
i = 3;
i += (2 + 2) + ++i;
Các ++i
increments thứ hai i
-4
và trả 4
:
i = 4;
i += (2 + 2) + 4;
Vì vậy, bạn kết thúc với 12
, không phải 9
.
Lỗi trong phần giải thích của tôi ở đâu? Điều gì sẽ là một lời giải thích chính xác?
Bạn có chắc chắn kết quả đầu ra 8 không? gây ra cho tôi nó kết quả đầu ra 9. –
Cảm ơn gợi ý. Nó kết quả đầu ra 9. (8 là một trong những câu đố khác). Tuy nhiên, 9 không phải là 12. –
Tôi nhận được đầu ra là 9 !! – Patton