在Java中切换布尔变量的最简洁方法?

Kev*_*fin 205 java boolean

是否有更好的方法来否定Java中的布尔值而不是简单的if-else?

if (theBoolean) {
    theBoolean = false;
} else {
    theBoolean = true;
}
Run Code Online (Sandbox Code Playgroud)

Aar*_*paa 513

theBoolean = !theBoolean;
Run Code Online (Sandbox Code Playgroud)

  • 我投票给类似于++ i和--i ;-)的!! bool算子 (29认同)
  • @ypnos:`!! bool ==!(!(bool))== bool`. (21认同)
  • 那是......真的很明显 - 哎呀!不知道为什么我没想到它.谢谢. (14认同)
  • @ChristofferHammarström通过那个逻辑,那么不应该--integer == - ( - (整数))==整数? (12认同)

小智 158

theBoolean ^= true;
Run Code Online (Sandbox Code Playgroud)

如果您的变量超过四个字母,则击键次数减少

  • 它符合DRY :) (13认同)
  • 现在,我得到了名不见经传的名字 - 丢弃(syntax-drop?)XOR,让我在程序员朋友面前显得很酷.你的答案应该与所选择的一起合并,它们是纯粹的完美. (7认同)
  • 简洁是机智的灵魂. (6认同)
  • @ScottStanchfield这样的人应该学习它.它并不难,它不是黑客,而且不知道它经常导致糟糕的代码,例如这个问题.这是一个真正的爆炸 - 使用标准惯例的五行! (6认同)
  • [此操作也比其他版本更快12%](http://jsperf.com/boolean-toggling),如`theBoolean =!theBoolean;`或`theBoolean = theBoolean?false:true;` (4认同)
  • 想想"应该学习它"与"试图了解当你有一天修复错误时会发生什么".是的,XOR在这里很酷,但是我提到的人数是多少人说"嗯?" 是惊人的.您应该始终为维护程序员编写代码,尽可能简化他的工作,因为无论编写代码的程度如何,阅读其他人的代码真的很糟糕. (2认同)

Lev*_*ite 30

有几个

"明显"的方式(对大多数人来说)

theBoolean = !theBoolean;
Run Code Online (Sandbox Code Playgroud)

"最短"的方式(大部分时间)

theBoolean ^= true;
Run Code Online (Sandbox Code Playgroud)

"最直观"的方式(最不确定)

theBoolean = theBoolean ? false : true;
Run Code Online (Sandbox Code Playgroud)

额外:在方法调用中切换和使用

theMethod( theBoolean ^= true );
Run Code Online (Sandbox Code Playgroud)

由于赋值运算符始终返回已分配的内容,因此将通过按位运算符切换值,然后返回要在方法调用中使用的新分配值.


Doc*_*ter 8

这个答案是在搜索“java invert boolean function”时出现的。下面的示例将防止某些静态分析工具由于分支逻辑而导致构建失败。如果您需要反转布尔值并且尚未构建全面的单元测试,这非常有用;)

Boolean.valueOf(aBool).equals(false)
Run Code Online (Sandbox Code Playgroud)

或者:

Boolean.FALSE.equals(aBool)
Run Code Online (Sandbox Code Playgroud)

或者

Boolean.FALSE::equals
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这样一个事实:您可以将 `Boolean.FALSE::equals` 传递给映射函数,而不是编写一些 lambda (4认同)