2014-02-21 2 views
0

Я смотрю на этом Java-код:В Java, когда происходит операция после инкремента?

 while (n-- != 0) { 
      if (searchMe.charAt(j++) != substring.charAt(k++)) { 
       continue test; 
      } 
     } 

Я смущен о том, когда именно, то n-- происходит операция. Это после заявления if?

+3

Нет такой вещи, как «цикл». – ubiquibacon

+0

@ubiquibacon - Ах да ;-) ok исправлено спасибо – Coffee

ответ

5

Операция n-- происходит каждый раз при оценке состояния while; особенно когда оценивается левая часть оператора !=. Это не имеет никакого отношения к заявлению if. Условие while оценивается в начале каждой итерации цикла; если он оценивается до true, тогда выполняется цикл цикла while (оператор if), но это хорошо после завершения операции n--. (Но, конечно, тогда есть следующая итерация цикла.)

1

Когда цикл while запускается в первый раз, значение n проверяется, если оно не равно нулю (поскольку это пост декремент).

После того, как условие оценивается, то есть после того, как оно входит в цикл while, значение n будет уменьшаться на один (n-1). И это новое значение будет использоваться внутри цикла while для этой конкретной итерации.

Следующая итерация, когда цикл while проверяет условие, значение (n-1) проверяется, если оно равно нулю и так далее.

+2

Фактически, когда выполняется проверка цикла 'while', значение' n' будет уменьшаться независимо от того, введен ли цикл. Так, например, если 'n == 0', когда сначала выполняется цикл' while', тогда 'n' будет' -1' в инструкции сразу после цикла while. –

+0

Да, я согласен с тобой Тедом Хоппом. :) –

1

-- или ++ Операторы, если положить после операнда, будут выполнены после того, как инструкция, содержащая его, будет завершена. Если поставить перед операндом, то это произойдет до этого утверждения.

В этом случае заявление равно while, так что это произойдет после него, что означает после оценки состояния в заявлении while.

+0

Приращение или декремент происходит, когда оператор оценивается, что может произойти задолго до завершения оператора. Таким образом, инструкция типа 'a [i ++] = a [i]' скопирует один элемент в предыдущий элемент массива 'a'. (То есть значение 'i', когда оценивается правая сторона -' a [i] '-, - это значение _after_' i' увеличивается, оценивая [выражение доступа к массиву] (http: // docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.13) 'a [i ++]' в левой части задания.) –

Смежные вопросы