ผลลัพธ์ของการเรียกใช้รหัสต่อไปนี้คืออะไร?
แพ็คเกจ com.test; Public Class Inc {โมฆะสาธารณะคงที่หลัก (String [] args) {inc inc = new Inc (); int i = 0; inc.fermin (i); i = i ++; System.out.println (i); } void fermin (int i) {i ++; -ผลลัพธ์คือ: 0
ผลลัพธ์ของการเรียกใช้รหัสที่คล้ายกันข้างต้นใน C/C ++ คือ: 1 ทำไมถึงเป็นเช่นนี้?
นี่เป็นเพราะ Java ใช้ กลไกตัวแปรแคชระดับกลาง:
i = i ++; เทียบเท่ากับ:
อุณหภูมิ = i; (ฉันอยู่ทางด้านขวาของเครื่องหมายเท่ากัน)
i = i+1; (ฉันอยู่ทางด้านขวาของเครื่องหมายเท่ากัน)
i = อุณหภูมิ; (ฉันอยู่ทางด้านซ้ายของเครื่องหมายเท่ากัน)
และ i = ++ i; เทียบเท่ากับ:
i = i+1;
อุณหภูมิ = i;
i = อุณหภูมิ;
คำอธิบายโดยละเอียด:
มีพื้นที่เก็บข้อมูลสองแห่งใน JVM หนึ่งแห่งคือพื้นที่จัดเก็บชั่วคราว (สแต็กเรียกว่าสแต็คด้านล่าง) และอีกพื้นที่หนึ่งเป็นพื้นที่ตัวแปร
JVM จะเรียกใช้คำสั่งนี้เช่นนี้:
ขั้นตอนที่ 1 JVM คัดลอกค่าของ I (ค่าของมันคือ 0) ไปยังพื้นที่ตัวแปรชั่วคราว (temp = 0)
ขั้นตอนที่ 2 เพิ่มค่าของพื้นที่ตัวแปร I ถึง 1 และค่าของฉันคือ 1
ขั้นตอนที่ 3 ส่งคืนค่าของพื้นที่ตัวแปรชั่วคราว (อุณหภูมิ) โปรดทราบว่าค่านี้เป็น 0 และยังไม่ได้รับการแก้ไข
ขั้นตอนที่ 4 ค่าส่งคืนจะถูกกำหนดให้กับ i ในพื้นที่ตัวแปรและค่าของฉันถูกรีเซ็ตเป็น 0
ไม่มีตัวแปรชั่วคราวหรือพื้นที่ชั่วคราวอื่น ๆ ที่จะบันทึก I ใน C/C ++ การดำเนินการทั้งหมดเสร็จสมบูรณ์ในพื้นที่หน่วยความจำเดียวดังนั้นจึงเป็น 1 ใน C/C ++
การแนะนำข้างต้นเกี่ยวกับปัญหาการเพิ่มขึ้นของตัวเองใน Java คือเนื้อหาทั้งหมดที่ฉันได้แบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น