โครงสร้างอย่างx = x++;บ่งชี้ว่าคุณอาจเข้าใจผิดว่าตัว++ดำเนินการทำอะไร:
// original code
int x = 7;
x = x++;
ลองเขียนสิ่งนี้ใหม่เพื่อทำสิ่งเดียวกันโดยยึดการลบ++โอเปอเรเตอร์:
// 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
ตอนนี้เรามาเขียนใหม่เพื่อทำ (สิ่งที่ฉันคิด) คุณต้องการ:
// original code
int x = 7;
x++;
ความละเอียดอ่อนที่นี่คือ++ผู้ประกอบการปรับเปลี่ยนตัวแปรxซึ่งแตกต่างจากการแสดงออกเช่นx + xซึ่งจะประเมินเป็นค่า int แต่ปล่อยให้ตัวแปรxตัวเองไม่เปลี่ยนแปลง พิจารณาการสร้างเช่นforห่วงที่เคารพ:
for(int i = 0; i < 10; i++)
{
System.out.println(i);
}
สังเกตเห็นi++ในที่นั่น? มันเป็นผู้ประกอบการเดียวกัน เราสามารถเขียนforลูปนี้แบบนี้และมันจะทำตัวเหมือนเดิม:
for(int i = 0; i < 10; i = i + 1)
{
System.out.println(i);
}
ฉันยังแนะนำไม่ให้ใช้++โอเปอเรเตอร์ในนิพจน์ที่ใหญ่กว่าในกรณีส่วนใหญ่ เนื่องจากความละเอียดอ่อนของเมื่อมันปรับเปลี่ยนตัวแปรดั้งเดิมในก่อนเพิ่มขึ้นโพสต์ ( ++xและx++ตามลำดับ) มันเป็นเรื่องง่ายมากที่จะแนะนำข้อบกพร่องที่ลึกซึ้งที่ยากที่จะติดตาม
int x = 7; x = ++x;แน่นอนว่ายังเป็นรหัสที่น่ากลัวคุณไม่จำเป็นต้องกำหนดใหม่int x = 7; x++;ก็เพียงพอแล้ว