Сегодня, после получаса поиска ошибки, я обнаружил, что можно поставить точку с запятой после инструкции if вместо кода, вот так:
if(a == b); // Do stuff
Что в основном означает, что материал будет выполнен независимо от того, a равно b или нет, и if оператор не имеет никакого смысла вообще. Почему Java не выдает мне ошибку? Есть ли какая-либо ситуация, в которой это было бы полезно?
Выполнение пустой инструкции всегда завершается нормально
По сути, это означает, что вы хотите выполнить пустую инструкцию if a == b
if(a == b);
Что вам следует делать:
Есть два основных решения этой проблемы:
Вы можете избежать проблем с пустой инструкцией, используя средство форматирования кода и сопутствующие материалы внутри if with { и }. Делая это, ваша пустая инструкция будет намного более читаемой.
if(a == b){ ; }
Вы также можете проверить инструменты, используемые для статического анализа кода, такие как:
Они могут мгновенно выявить проблемы, подобные этой.
Я бы рекомендовал объединить оба решения.
Ответ 2
Есть ли какая-либо ситуация, в которой это было бы полезно?
Полезно? Как в "делает ваш код чище, понятнее, быстрее, более ремонтопригодным"? Совсем нет. Скорее всего, это плохой, запутанный код.
Но это не обязательно безвредно. Такая инструкция может выполнять действия и / или изменять состояние из-за методов, которые вызывают побочные эффекты, и необязательно оценивать эти методы из-за короткого замыкания операторов.
if( a() && b() );
Здесь a() или b() может что-то сделать и b() будет выполняться, только если a() значение true.
Что касается почему, я думаю, ответ прост: было бы хуже отклоняться от определенного, ожидаемого поведения (например, таких операторов, как while(reader.read());), чем альтернатива написания разработчиками плохого кода.
Написание плохого кода возможно всегда. И просто повторю, это был бы плохой код почти в любом случае.
Ответ 3
Возможный вариант использования:
if (a==b); else { // Do something }
Не очень хорошо, но возможно.
Тем не менее, я действительно думаю, что спецификация Java должна запрещать пустое значение if.
Ответ 4
Если вы используете Eclipse, вы можете заставить его предупреждать вас об этих инструкциях: