web-dev-qa-db-fra.com

Quelle est la manière la plus concise d'obtenir l'inverse d'une valeur booléenne Java?

Si vous avez une variable booléenne:

boolean myBool = true;

Je pourrais obtenir l'inverse de ceci avec une clause if/else:

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

Existe-t-il une manière plus concise de procéder?

34
faq

Attribuez simplement à l'aide de l'opérateur logique NOT ! comme vous avez tendance à le faire dans vos instructions de condition (if, for, while...). Vous travaillez déjà avec une valeur booléenne, donc elle basculera true vers false (et vice versa):

myBool = !myBool;
92
BoltClock

Une façon encore plus cool (qui est plus concise que myBool = !myBool Pour les noms de variables de plus de 4 caractères si vous voulez définir la variable):

myBool ^= true;

Et au fait, n'utilisez pas if (something == true), c'est plus simple si vous faites simplement if (something) (la même chose que si vous comparez avec false, utilisez l'opérateur de négation).

41
fortran

Pour un boolean c'est assez facile, un Boolean est un peu plus difficile.

  • Un boolean n'a que 2 états possibles: trueet false.
  • Un Boolean d'autre part, a 3: Boolean.TRUE, Boolean.FALSE ou null.

En supposant que vous traitez simplement avec un boolean (qui est un type primitif) alors la chose la plus simple à faire est:

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

Cependant, si vous voulez inverser un Boolean (qui est un objet), vous devez faire attention à la valeur null, ou vous pouvez vous retrouver avec un NullPointerException.

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

En supposant que cette valeur n'est jamais nulle et que votre entreprise ou organisation n'a pas de règles de code contre la (dé) boxe automatique. Vous pouvez simplement l'écrire sur une seule ligne.

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

Cependant, si vous souhaitez également prendre soin des valeurs null. Il y a ensuite plusieurs interprétations.

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);

D'un autre côté, si vous voulez que null reste null après l'inversion, vous pouvez envisager d'utiliser le Apache commons classe BooleanUtils ( voir javadoc )

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

Certains préfèrent simplement tout écrire, pour éviter d'avoir la dépendance Apache.

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

La manière la plus concise est de ne pas inverser le booléen, et d'utiliser simplement! MyBool plus tard dans le code lorsque vous voulez vérifier la condition opposée.

1
Daniel Widdis