¿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
yfalse
. - Un
Boolean
por otro lado, tiene 3:Boolean.TRUE
,Boolean.FALSE
onull
.
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;