Различение локальных переменных с одинаковыми именами в цикле

Для Android используйте BackAndroid для выхода из приложения:

import React, {
    BackAndroid,
} from 'react-native';

BackAndroid.exitApp();

0
задан Mark Rotteveel 15 January 2019 в 19:48
поделиться

2 ответа

Локальные переменные Java имеют защиту, известную как определенное присваивание , это означает, что вы не можете прочитать значение из них до того, как присвоите ему значение.

Они также определены в области действия : доступ к переменной можно получить только в пределах определенного фрагмента программы.

Вместе с этими двумя вещами вам не нужна отдельная переменная для каждой итерации цикла: вы гарантированно присваиваете локальной переменной значение перед ее использованием, поэтому вы гарантированно перезаписываете любое значение, которое было хранится в нем раньше, если таковые имеются.

Переменные - действительно просто полезная концепция в исходном коде. После компиляции байт-код не имеет имен переменных: компилятор просто определил, что он может временно использовать определенную часть памяти для хранения значения в течение ограниченного времени. Он будет многократно использовать эту память, но таким образом, чтобы она не перекрывала использование.

0
ответ дан Andy Turner 15 January 2019 в 19:48
поделиться

С небольшим упрощением:

Внутри блока { ... }, int k = 0; создает переменную, и эта переменная существует до того момента, когда вы достигнете конца блока, и там переменная разрушается. Таким образом, в любой момент во время выполнения программы существует не более одного n, j или k.

Немного ближе к реальности:

Компилятор просматривает весь метод, находит список переменных, которые могут существовать параллельно (i, n, j, k и foundIt), и выделяет достаточно места в стеке для этих переменных (5 мест в вашем примере). Эти места в стеке существуют с момента, когда вы вводите свой метод, до тех пор, пока вы не вернетесь из него, но они не используются постоянно, например, место k содержит только полезные значения с момента выполнения int k = 0; до конца итерации текущего цикла.

0
ответ дан Ralf Kleberhoff 15 January 2019 в 19:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: