布尔操作技巧

时间:2010-09-10 18:43:18

标签: java boolean

我之前在代码中看过这个,但是忘了它。基本上它切换一个布尔变量。如果是真的,它将设置为false,反之亦然。但遗憾的是忘记了语法。

它基本上是一个单行:

if (myVar) {  
    myVar = false;  
} else {  
    myVar = true;  
}  

它是这样的,但不知道它的名称或正确的语法:

myVar = myVar : false ? true;

13 个答案:

答案 0 :(得分:70)

怎么样

myVar = !myVar

答案 1 :(得分:27)

myVar = myVar ? false : true;正在使用conditional operator

你可以这样做

myVar = !myVar;

答案 2 :(得分:17)

另一种选择是XOR:

myVar ^= true;

值得注意的是,只有任务的LHS发生变化;右边是常量,将切换任何布尔变量。然而,否定的更多是自我记录的IMO。

答案 3 :(得分:5)

您在考虑的是条件运算符:

myVar = myVvar ? false : true;

(正如你所看到的,很多人称之为“三元运算符”,但这只意味着它是一个有三个操作数的运算符。实际上,只有一个运算符在这种语言中有三个操作数,但是它仍然没有说明运营商做了什么。)

使用否定运算符当然更容易:

myVar = !myVar;

答案 4 :(得分:4)

目前我能想到的最小代码。我不知道它叫什么(如果它有一个名字,正如你似乎建议的那样)

myVar = !myVar

答案 5 :(得分:4)

您所谈论的是“三元”或“条件”运算符,它根据条件执行内联替换。

语法为:

condition ? trueValue : falseValue

我经常在我的条件下抛出括号,有时在整个条件运算符周围。取决于我试图从其他所有内容中描绘它的程度。

例如,假设您想要返回两个数字中较大的一个:

public int max(int a, int b)
{
  return (a > b) ? a : b;
}

请注意,它可以替换为其他内容。


好的,现在让我们解决关于切换布尔类型的实际问题。

myVar = (myVar) ? false : true;

是如何使用条件运算符完成的。 (同样,括号不是必需的,我只是喜欢它们。)

但是有一种更简单的方法来切换布尔值...使用逻辑NOT(“!”)运算符:

myVar = !myVar;

保持简单。 : - )

答案 6 :(得分:3)

if(myVar == true)
{
    myVar = false;
}
else if (myVar == false)
{
    myVar = true;
}
else
{
    myVar = FILE_NOT_FOUND
}

答案 7 :(得分:2)

这也有效:P

v=v?!v:!v;

答案 8 :(得分:0)

有一个三元运算符(wikipedia)。这允许你编写一个浓缩的if-else语句,就像在第二个例子中一样。

在java中:

myVar = (myVar) ? true : false;

还有NOT运算符,用于切换布尔变量。在java中就是!我相信这就是你想要的。

myVar = !myVar;

答案 9 :(得分:0)

public boolean toggle(boolean bool)
{
  return !bool;
}

答案 10 :(得分:0)

我最近(我自己)找到了一个类似的答案,已经在这里说过了。但是,最简单和最短(具有最少代码的非重复变量名称)答案是:

formControl.disabled ^= 1;

当想要切换布尔值,基于DOM的属性(例如,表单控件/输入的禁用属性 - 从不可编辑状态转换为编辑状态)时,这在JavaScript中效果最佳。经过多次搜索(没有我喜欢的结果)和一些反复试验,我发现我的解决方案是最简单的(但是,真正的而不是1会更清楚 - 就像之前发布的那样)。

由于这种语法不是很清楚,我不建议经常使用它(我认为当变量或属性使上下文明显时这是合适的)。我发布了这个响应(而不是发表评论),因为应该使用XOR按位自我赋值的上下文非常重要。在考虑最佳实践时,应该主要避免这种“伎俩”。

答案 11 :(得分:-1)

正如其他人所说,有两种方法可以否定某些内容:“左值=!左值;”和“左值^ = 1;”。认识到差异很重要。

如果它是零,则说“lvalue =!lvalue”将使lvalue设置为1,如果设置为其他任何,则将其设置为0。左值将被评估两次;这不是简单变量的一个因素,但是说“someArray [index1] [index2] [index3] [index4] =!someArray [index1] [index2] [index3] [index4]”可能会减慢速度。

说“左值^ = 1;”如果它是0,则会导致左值设置为1,如果它是1,则将其设置为0,如果它既不是零也不是1,则将其他值设置为其他值。仅需要指定或评估左值,并且如果已知该值为零或者1,这种形式可能会更快。

太糟糕了,没有自动否定操作员;有时候这样的事情会很方便。

答案 12 :(得分:-2)

您也可以使用此处所示的二进制形式的否定。

if ((v == true) && !(v = false)) {
    v != true;   /* negate with true if true. */
} else {
    v =! false;  /* negate with false if false. */
}