Cấu trúc như x = x++;
thể hiện bạn có thể hiểu sai những gì người ++
vận hành làm:
// original code
int x = 7;
x = x++;
Hãy viết lại điều này để làm điều tương tự, dựa trên việc loại bỏ ++
toán tử:
// behaves the same as the original code
int x = 7;
int tmp = x; // value of tmp here is 7
x = x + 1; // x temporarily equals 8 (this is the evaluation of ++)
x = tmp; // oops! we overwrote y with 7
Bây giờ, hãy viết lại để làm (những gì tôi nghĩ) bạn muốn:
// original code
int x = 7;
x++;
Sự tinh tế ở đây là ++
toán tử sửa đổi biếnx
, không giống như một biểu thức x + x
, như sẽ đánh giá một giá trị int nhưng x
không thay đổi chính biến đó. Hãy xem xét một cấu trúc như for
vòng lặp đáng kính :
for(int i = 0; i < 10; i++)
{
System.out.println(i);
}
Thông báo i++
trong đó? Đó là cùng một nhà điều hành. Chúng ta có thể viết lại for
vòng lặp này như thế này và nó sẽ hoạt động giống nhau:
for(int i = 0; i < 10; i = i + 1)
{
System.out.println(i);
}
Tôi cũng khuyên bạn không nên sử dụng ++
toán tử trong các biểu thức lớn hơn trong hầu hết các trường hợp. Do sự tinh tế khi nó sửa đổi biến ban đầu theo mức tăng trước so với sau tăng ( ++x
và x++
, tương ứng), nên rất dễ đưa ra các lỗi tinh vi rất khó theo dõi.
int x = 7; x = ++x;
:, tất nhiên vẫn là mã khủng khiếp, bạn không cần phải gán lại.int x = 7; x++;
Là đủ.