Confundirse con == y = en la declaración "if"

Sé que no podemos usar el operador de asignación en declaraciones if en java como lo usamos en otros pocos idiomas.

es decir

            int a;

            if(a = 1) {  } 

dará un error de compilación.

pero el siguiente código funciona bien, ¿cómo?

           boolean b;

           if(b = true) {   }

EDITAR: ¿Es esta la excepción para descartar que la asignación no se pueda usar en la instrucción if?