Tengo en un Controlador el siguiente metodo, el cual evalua el genero de un usuario cuando va a registrarse en mi sitio.
if (user.getGender() != "other" && user.getGender() != "male" && user.getGender() != "female") {
model.addAttribute("invalid_gender", 1);
model.addAttribute(Constants.TITLE, REGISTER_TITLE);
return "register";
}
En mi formulario tengo unicamente 3 opciones para el genero, las cuales son
- Other
- Male
- Female
Si bien el texto tiene la primera letra de cada uno en mayúsculas, el value esta siempre en minúscula y así se guarda en la base de datos.
El problema es que aunque yo seleccione un genero del combobox, por alguna razon entra a mi condicional if. Si yo desde inspeccionar elemento modifico el value de los combobox, aun asi también me salta el error personalizado de genero invalido (esto es correcto, lo que no es correcto es que me salte cuando el genero es valido).
Sabiendo que con que una de las condiciones no se cumpla me debería de devolver false pero intrigado de porque esto no sucedia probe lo siguiente
System.out.println(true && false && false);
System.out.println(false && true && false);
System.out.println(false && false && true);
Y como era de esperar, todos devuelven false, pero aun así se ejecuta el código de mi if.
Cabe aclarar que he logrado lo que queria de la siguiente forma
if (!(user.getGender().equals("other") || user.getGender().equals("male") || user.getGender().equals("female"))) {
model.addAttribute("invalid_gender", 1);
model.addAttribute(Constants.TITLE, REGISTER_TITLE);
return "register";
}
Pero, ¿que es lo sucede en la primera forma que siempre se evalúa como true?
Saludos y gracias.