因此,对于在布尔二元运算符,Java有&,|,^,&&和||.
让我们简要总结一下他们在这里简要介绍的内容:
对于
&,结果值是true两个操作数值是否为true; 否则,结果是false.对于
|,结果值是false两个操作数值是否为false; 否则,结果是true.对于
^,结果值是true操作数值是否不同; 否则,结果是false.该
&&操作是一样&,但是评估其右边的操作数只有在其左侧操作数的值true.该
||操作是一样|的,但评估其右边的操作数只有在其左侧操作数的值false.
现在,所有5间,那些3有复合赋值版本,分别为|=,&=和^=.所以我的问题是显而易见的:为什么不是Java提供&&=和||=呢?我发现我需要那些比我更需要更多的&=和|=.
而且我不认为"因为它太长"是一个很好的答案,因为Java有>>>=.这个遗漏必须有更好的理由.
java conditional-operator short-circuiting assignment-operator compound-assignment
可能重复:
为什么没有|| =或&& =运算符?
通过纯粹的意外,我今天发现了
a &= GetBool();
Run Code Online (Sandbox Code Playgroud)
是不一样的
a = a && GetBool();
Run Code Online (Sandbox Code Playgroud)
多年来我一定误解了这一点.在第一个例子中,GetBool()即使"a"为假,也执行"".在第二个,它不是.
在C#中有什么东西可以实现"&& ="吗?
我在C#中有一个方法,SendEvent它返回一个bool表示它是否成功的方法.我想循环遍历许多对象并调用SendEvent它们,最后,有一个结果变量是a bool,即true如果所有SendEvent调用都成功,并且false至少有一个失败.
起初我这样做了:
bool result = true;
for (int i = 0; i < myObjects.Length; i++)
{
result = result && myObjects[i].SendEvent();
}
Run Code Online (Sandbox Code Playgroud)
但是SendEvent如果一个失败,那将导致后续对象不会被调用,因为&&如果结果是,则不会执行操作符的右侧false.
所以我把它转过来:
bool result = true;
for (int i = 0; i < myObjects.Length; i++)
{
result = myObjects[i].SendEvent() && result;
}
Run Code Online (Sandbox Code Playgroud)
但我觉得有点难看.我可以使用按位运算&=符来始终执行SendEvent调用,并设置结果的值,像这样?
bool result = true;
for (int i = 0; i < …Run Code Online (Sandbox Code Playgroud) 出于好奇,为什么按位运算符~是唯一一个在C++中没有赋值版本的非逻辑运算符,即~=?所有关系运算符和按位运算符都有赋值版本,但~=缺少.这有什么特别的原因吗?
对于C++中的所有运算符,请参阅:http://www.tutorialspoint.com/cplusplus/cpp_operators.htm