2015-11-03 18 views
5

Tại sao kết quả 8 và không phải là 9?Toán tử gia tăng hoạt động như thế nào trong Java?

Theo logic của tôi:

  1. ++x cho 4
  2. 4 + 4 cho 8, vì vậy x = 8
  3. Nhưng sau khi tuyên bố rằng x nên được tăng lên do x++, vì vậy nó phải được 9.

Có gì sai với logic của tôi ?:

int x = 3; 
x = x++ + ++x; 
System.out.println(x); // Result: 8 

Trả lời

21

Bạn nên lưu ý rằng biểu thức được đánh giá từ bên trái sang bên phải:

Đầu tiên x++ increments x nhưng trả về giá trị trước của 3.

Sau đó ++x gia số x và trả về giá trị mới của 5 (sau hai lần tăng).

x = x++ + ++x; 
    3 + 5  = 8 

Tuy nhiên, ngay cả khi bạn đã thay đổi biểu thức để

x = ++x + x++; 

bạn vẫn sẽ nhận được 8

x = ++x + x++ 
    4 + 4 = 8 

Lần này, thặng dư thứ hai của x (x++) bị ghi đè khi kết quả của việc bổ sung được gán cho x.

+1

Khi câu trả lời này đúng, kết quả phụ thuộc mạnh vào thực tế là các biểu thức đang được đánh giá từ trái sang phải, như Java đảm bảo. Một số ngôn ngữ khác (đáng chú ý là C và C++) thiếu sự bảo đảm này, làm cho cùng một lý do không hợp lệ trong các ngữ cảnh như vậy. (Tôi biết điều này là về Java, chỉ, nhưng muốn nhấn mạnh điều này anyway) – chi

+0

Có đúng không ?: "Bạn nên lưu ý rằng biểu thức được đánh giá từ bên trái sang bên phải" x = x ++ + ++ x; 3 + 5 = 8 Tại sao 5? Nó phải là 4, phải không? –

+0

@AdamAry Vâng. – Eran

1

++ x được gọi là tiền tố và x ++ được gọi là postincrement. x ++ cho giá trị trước đó và ++ x cho giá trị mới.

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