Это зависит от языка. Но в C, например, присваивание является выражением, которое имеет значение, а не оператором.
Следовательно
if(a = b)
является действительным кодом и оценивается как истинное всякий раз, когда b
отличался от нуля (т. Е. true
в смысле C) перед этим кодом, а также назначает старое значение b для a.
С другой стороны,
if(a == b)
имеет значение true, только если a
и b
имеют одинаковые значения и не выполняют присваивание.
Языки, «унаследованные» от C, такие как Java и C #, сохранили эту логику, но уменьшили вероятность ошибок, требуя, чтобы условие имело тип boolean. Следовательно, мой первый пример вызовет ошибку компилятора (если a
и b
не являются булевыми переменными).