40

如果你有一个布尔变量:

boolean myBool = true;

我可以用 if/else 子句得到相反的结果:

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

有没有更简洁的方法来做到这一点?

4

5 回答 5

103

只需使用逻辑 NOT 运算符进行分配,!就像您在条件语句 ( if, for, while...) 中所做的那样。您已经在使用布尔值,因此它会翻转truefalse(反之亦然):

myBool = !myBool;
于 2010-10-11T15:00:27.853 回答
44

一种更酷的方式(myBool = !myBool如果要设置变量,这比长度超过 4 个字符的变量名更简洁):

myBool ^= true;

顺便说一句,不要使用if (something == true),如果你这样做会更简单if (something)(与false比较相同,使用否定运算符)。

于 2010-10-11T15:12:05.473 回答
17

对于 aboolean这很容易, aBoolean更具挑战性。

  • Aboolean只有 2 种可能的状态: truefalse
  • Boolean另一方面,A有 3 Boolean.TRUE: Boolean.FALSEnull

假设您只是在处理 a boolean(这是一种原始类型),那么最简单的事情是:

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

但是,如果你想反转 a Boolean(它是一个对象),你必须注意它的null值,否则你可能会得到 a NullPointerException

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

假设此值永远不会为空,并且您的公司或组织没有针对自动(取消)装箱的代码规则。您实际上可以将其写在一行中。

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

但是,如果您也想照顾这些null价值观。然后有几种解释。

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

另一方面,如果您想在反转后null保留null,那么您可能需要考虑使用apache commons该类BooleanUtils请参阅 javadoc

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

有些人更喜欢把它全部写出来,以避免对 apache 的依赖。

Boolean someValue = null; // or Boolean.TRUE or Boolean.FALSE;
Boolean negative = (someValue == null)? null : Boolean.valueOf(!someValue.booleanValue());
于 2014-04-21T17:13:15.730 回答
1

最简洁的方法是不反转布尔值,当您想检查相反的条件时,只需在代码中稍后使用 !myBool 即可。

于 2012-02-18T04:43:21.040 回答
-3
myBool = myBool ? false : true;
于 2010-10-11T16:01:48.823 回答