Почему при явном булевом тесте появляется предупреждение о мертвом коде, а при неявном нет

Мне было интересно, почему следующее неявное тестирование для логического значения true не дает предупреждения о мертвом коде, а явное тестирование дает его?

Например:

public void noDeadCodeWarning()
{
    final boolean x = false;
    if ( x )
    {
      System.out.println("This is dead code");  // no warning
    }
}

public void hasDeadCodeWarning()
{
    final boolean x = false;
    if ( x == true )
    {
      System.out.println("This is dead code");  // yes warning
    }
}

Я использую затмение марс. и Ява 1.8


person Gonen I    schedule 22.01.2017    source источник
comment
Java не делает никаких предупреждений — это функция IDE.   -  person Murat Karagöz    schedule 22.01.2017
comment
Потому что разработчик eclipse решил это сделать.   -  person luk2302    schedule 22.01.2017
comment
OK. Это объясняет, почему, если я изменю if на некоторое время, в обоих случаях будет выдана ошибка недостижимого кода.   -  person Gonen I    schedule 22.01.2017
comment
Гонен, вот лучшее объяснение, предоставленное в этой ссылке здесь Джона Скита, а также справочная ссылка для правила достижимости.   -  person Aniket    schedule 24.06.2021


Ответы (1)


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

В соответствии с IDE, если оператору требуется логическое значение в качестве условия, поэтому он не оценивает

person Sreemat    schedule 22.01.2017