поведение отладчика в if, else if, else - PullRequest
2 голосов
/ 10 февраля 2012

У нас есть приложение на Java 6, работающее на сервере приложений Weblogic 11. Я пытаюсь отладить проблему. Мой код

if(a==0){
    //Do  A
}
else if(a==1){
    // Do B
}
else{
    // do C
}

Моя проблема в том, что даже если блок my if равен true и строка 2 выполняется, отладчик переходит на строку 8 в блоке else. Код на моей машине и на сервере синхронизируются, поэтому нет несоответствия. Пожалуйста, помогите мне найти, что может быть не так с моим кодом.

Ответы [ 3 ]

1 голос
/ 10 февраля 2012

Нам нужно знать, что означает // Do C.

Если есть назначение:

if (a == 0) {
      b = 1;
} else  if (a == 1) {
      b = 0;
}
else {
      b = null;
}

типичная оптимизация, которую делают некоторые компиляторы:

b = null;
if (a == 0) {
    b = 1;
} else if (a == 1) {
    b = 0;
}

И это исполняемый байт-код. Не говоря уже о том, если код компилируется в native компилятором JIT. Таким образом, в зависимости от вашего клиента отладки и JDK вы можете увидеть сумасшедшие текущие строки инструкций. Но это нормально, если ожидается состояние в конце блока.

Иногда для выполнения необходимо закрыть оператор. Итак, дело дошло до закрытия.

Убедитесь, что a не присвоено никаких значений static, и если это так, то оно будет перекомпилировано Назначения статических связаны во время компиляции.

0 голосов
/ 10 февраля 2012

не забывайте, что = - это присвоение, а == - это сравнение - в вашем случае вы присваиваете значение, а затем проверяете результат присвоения, а НЕ выполняете сравнение.

Просто измените

if(a=0){
    //Do A
}
else if(a=1){
    // Do B

на

if(a==0){
    //Do A
}
else if(a==1){
    // Do B
0 голосов
/ 10 февраля 2012

Не должно ли быть:

if(a==0)
...
else if(a==1)
...
else
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...