Подумайте:
if (a=5) { /* do something */ }
Как присваивание работает как условие?
Основано ли оно на ненулевом значении l-значения?