Каков результат запуска следующего кода?
пакет com.test; public class inc {public static void main (string [] args) {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 больше.