2010-10-11 20 views
27

Si tiene una variable booleana:¿Cuál es la forma más concisa de obtener el inverso de un valor booleano de Java?

boolean myBool = true; 

que podría conseguir el inverso de esto con una cláusula if/else:

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

¿Hay una manera más concisa para hacer esto?

+3

BoltClock tiene la respuesta óptima; Sin embargo, me gustaría señalar que "if (myBool == true)" ya es muy hablador; "if (myBool)" hace exactamente lo mismo. – phisch

+1

@phisch: 'if ((! MyBool! = True || false) && (! (MyBool! = False || true) == falso))' – BoltClock

+1

myBool = (myBool)? falso verdadero; (porque simplemente no puedo resistirme a la oportunidad de usar la forma ternaria, incluso si esto no es - el más conciso) – KevinDTimm

Respuesta

83

Basta con asignar el uso de la lógica NO operador ! como se tiende a hacer en sus sentencias de condiciones (if, for, while ...). Se trabaja con un valor booleano ya, por lo que va a dar la vuelta a truefalse (y viceversa):

myBool = !myBool; 
+2

Esto es de hecho más conciso. Pero me gustaría señalar que la respuesta de 'bvdb' se refiere al manejo adecuado de' Boolean' – buzzsawddog

36

Una forma aún más fresco (esto es más conciso que myBool = !myBool para los nombres de variable con longitud de 4 caracteres si desea establecer la variable):

myBool ^= true; 

Y, por cierto, no utilice if (something == true), es más sencillo si sólo hacemos if (something) (lo mismo con la comparación con datos falsos, utilice el operador de negación).

+11

¡Vaya, sí, XOR! +1 – BoltClock

+8

Esas son las pequeñas cosas que hacen que las interminables horas de programación sean más divertidas xD – fortran

+3

Tenía la esperanza de encontrar una sintaxis concisa que mis compañeros de trabajo entenderán intuitivamente sin necesidad de hacer una pregunta sobre StackOverflow para entender lo que estoy haciendo. – faq

-3
myBool = myBool ? false : true; 
+4

copiado de los comentarios a la pregunta? – Jorn

+0

¿No hay diferencia entre ambos? – Jinjavacoder

1

La forma más concisa es no invertir el booleano, y sólo tiene que utilizar! MyBool más adelante en el código cuando se desea comprobar la condición opuesta.

+3

tiene razón, pero a veces tiene que hacerlo si es una bandera que realmente cambia – fortran

11

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

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

Suponiendo que usted está tratando con un boolean (que es un tipo primitivo), entonces la cosa más fácil de hacer es:

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

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

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

Suponiendo que este valor no es nulo, y que su empresa u organización tiene ningún código de reglas de boxeo contra el auto (ONU). En realidad, puede simplemente escribirlo en una línea.

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

Sin embargo, si usted quiere tomar el cuidado de los null valores. 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 quieres null permanecer null después de la inversión, entonces es posible que desee considerar el uso de la clase apache commonsBooleanUtils (see javadoc)

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

Algunos prefieren simplemente escribirlo todo fuera, 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); 
+1

Gracias por esta respuesta. Siento que la respuesta aceptada es de hecho más concisa. ¡PERO Siento que tu respuesta es más completa! Gracias por cubrir 'boolean' AND' Boolean' – buzzsawddog

Cuestiones relacionadas