ما هي نتيجة تشغيل الكود التالي؟
حزمة com.test ؛ public class inc {public static void main (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 ++ ؛ أي ما يعادل:
temp = i ؛ (أنا على الجانب الأيمن من العلامة المتساوية)
i = i+1 ؛ (أنا على يمين العلامة المتساوية)
أنا = درجة الحرارة ؛ (أنا على الجانب الأيسر من العلامة المتساوية)
و i = ++ i ؛ يعادل:
i = i+1 ؛
temp = i ؛
أنا = درجة الحرارة ؛
شرح مفصل:
هناك منطقتان للتخزين في JVM ، إحداها هي منطقة التخزين المؤقتة (مكدس ، تسمى المكدس أدناه) ، والآخر هو المنطقة المتغيرة.
سيقوم JVM بتشغيل هذا البيان مثل هذا:
الخطوة 1 jvm نسخ قيمة i (قيمتها هي 0) إلى المنطقة المتغيرة المؤقتة (temp = 0).
الخطوة 2 أضف قيمة المنطقة المتغيرة I إلى 1 ، وقيمة I هي 1.
الخطوة 3 إرجاع قيمة المنطقة المتغيرة المؤقتة (درجة الحرارة). لاحظ أن هذه القيمة 0 ولم يتم تعديلها.
الخطوة 4 يتم تعيين قيمة الإرجاع إلى I في المنطقة المتغيرة ، ويتم إعادة تعيين قيمة I إلى 0.
لا يوجد أي متغير مؤقت أو مساحة مؤقتة أخرى لإنقاذ I في C/C ++. يتم الانتهاء من جميع العمليات في مساحة ذاكرة واحدة ، لذلك هي 1 في C/C ++.
إن المقدمة أعلاه لمشكلة التزجيج الذاتي في Java هي كل المحتوى الذي شاركته معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.