java boolean inverse

¿Cuál es la forma más concisa de obtener el inverso de un valor booleano de Java?



inverse (5)

¡Simplemente asigne usando el operador lógico NOT ! como usted tiende a hacer en sus estados de condición ( if , for , while ...). Ya está trabajando con un valor booleano, por lo que cambiará de true a false (y viceversa):

myBool = !myBool;

Esta pregunta ya tiene una respuesta aquí:

Si tienes una variable booleana:

boolean myBool = true;

Podría obtener el inverso de esto con una cláusula if / else:

if (myBool == true) myBool = false; else myBool = true;

¿Hay una forma más concisa de hacer esto?


La forma más concisa es no invertir el booleano, y simplemente usar! MyBool más adelante en el código cuando desee verificar la condición opuesta.


Para un boolean es bastante fácil, un Boolean es un poco más desafiante.

  • Un boolean solo tiene 2 estados posibles: true y false .
  • Un Boolean por otro lado, tiene 3: Boolean.TRUE , Boolean.FALSE o null .

Suponiendo que solo está tratando con un boolean (que es un tipo primitivo), entonces lo más fácil es:

boolean someValue = true; // or false boolean negative = !someValue;

Sin embargo, si desea invertir un Boolean (que es un objeto), debe tener cuidado con el valor null , o puede terminar con una NullPointerException .

Boolean someValue = null; Boolean negativeObj = !someValue.booleanValue(); --> throws NullPointerException.

Suponiendo que este valor nunca sea nulo, y que su empresa u organización no tenga reglas de código contra el auto (un) boxeo. En realidad, puede simplemente escribirlo en una línea.

Boolean someValue = Boolean.TRUE; // or Boolean.FALSE Boolean negativeObj = !someValue;

Sin embargo, si también quieres cuidar los valores null . Luego hay varias interpretaciones.

boolean negative = !Boolean.TRUE.equals(someValue); //--> this assumes that the inverse of NULL should be TRUE. // if you want to convert it back to a Boolean object, then add the following. Boolean negativeObj = Boolean.valueOf(negative);

Por otro lado, si desea que null permanezca null después de la inversión, entonces es posible que desee considerar el uso de la clase apache commons BooleanUtils ( consulte javadoc )

Boolean someValue = null; // or Boolean.TRUE or Boolean.FALSE; Boolean negativeObj = BooleanUtils.negate(someValue);

Algunos prefieren simplemente escribirlo todo, para evitar tener la dependencia de Apache.

Boolean someValue = null; // or Boolean.TRUE or Boolean.FALSE; boolean negative = (someValue == null)? null : !someValue.booleanValue(); Boolean negativeObj = Boolean.valueOf(negative);


Una forma aún más myBool = !myBool (que es más concisa que myBool = !myBool para nombres de variables de más de 4 caracteres si desea establecer la variable):

myBool ^= true;

Y, por cierto, no use if (something == true) , es más simple si lo hace if (something) (lo mismo con la comparación con falso, use el operador de negación).


myBool = myBool ? false : true;