Переменная может быть назначена в цикле? - PullRequest
0 голосов
/ 27 мая 2018

Я не знаю, почему код не компилируется, когда переменная final инициализируется в цикле, а цикл повторяется только один раз?Является ли Loop каким-то образом запущенным более одного раза и многократные присвоения выполняются для переменной x?

public static void main(String args[]) {

    int y;
    final int x;
    y=1;
    while(y<=1) {
        x=10;       //Compile time error; even loop iterate only once.
        y++;
    }
}

Ответы [ 4 ]

0 голосов
/ 27 мая 2018

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

0 голосов
/ 27 мая 2018

В Java финальная переменная является константой, поэтому вы не можете изменить ее значение.В приведенном выше коде x является конечной переменной, и я вижу, что вы пытаетесь изменить значение x.Итак, вы получили ошибку времени компиляции.

0 голосов
/ 27 мая 2018

когда у вас объявлена ​​переменная экземпляра

final int x;

x присвоено 0. и тег final не позволит ее изменить.

while(y<=1) {
    x=10;       //Compile time error; even loop iterate only once.
y++;
}

внутри цикла while вы присваиваете x 10, что не подчиняется правилу final .

0 голосов
/ 27 мая 2018

Удалить ключевое слово final.Вы не можете присвоить переменной значение, равное final снова и снова.Вы не можете инициализировать значение в цикле for или while, но из-за этого оно может быть вызвано только один раз - это происходит потому, что заранее неизвестно, сколько раз будет вызван цикл.

...