我在Java中有很长的比较,我想知道它们中的一个或多个是否真实.比较字符串很长且难以阅读,因此我将其分解以便于阅读,并自动使用快捷操作符|=而不是negativeValue = negativeValue || boolean.
boolean negativeValue = false;
negativeValue |= (defaultStock < 0);
negativeValue |= (defaultWholesale < 0);
negativeValue |= (defaultRetail < 0);
negativeValue |= (defaultDelivery < 0);
Run Code Online (Sandbox Code Playgroud)
negativeValue如果任何默认的<something>值为负,我希望是真的.这有效吗?它会做我期望的吗?我在Sun的网站或stackoverflow上看不到它,但Eclipse似乎没有问题,代码编译和运行.
同样,如果我想执行几个逻辑交叉点,我可以使用&=而不是&&吗?
因此,对于在布尔二元运算符,Java有&,|,^,&&和||.
让我们简要总结一下他们在这里简要介绍的内容:
对于
&,结果值是true两个操作数值是否为true; 否则,结果是false.对于
|,结果值是false两个操作数值是否为false; 否则,结果是true.对于
^,结果值是true操作数值是否不同; 否则,结果是false.该
&&操作是一样&,但是评估其右边的操作数只有在其左侧操作数的值true.该
||操作是一样|的,但评估其右边的操作数只有在其左侧操作数的值false.
现在,所有5间,那些3有复合赋值版本,分别为|=,&=和^=.所以我的问题是显而易见的:为什么不是Java提供&&=和||=呢?我发现我需要那些比我更需要更多的&=和|=.
而且我不认为"因为它太长"是一个很好的答案,因为Java有>>>=.这个遗漏必须有更好的理由.
java conditional-operator short-circuiting assignment-operator compound-assignment
可能重复:
为什么我们通常||不使用|,有什么区别?
标题说明了一切.它已被讨论过其他语言,但我还没有看到它用于Java.
这是代码段
你能解释一下输出变化的原因吗?
1)
public static ShortCkt {
public static void main(String args[]) {
int i = 0;
boolean t = true;
boolean f = false, b;
b = (t && ((i++) == 0));
b = (f && ((i+=2) > 0));
System.out.println(i);
}
}
Run Code Online (Sandbox Code Playgroud)
这种情况下的输出为1
2)
public static ShortCkt {
public static void main(String args[]) {
int i = 0;
boolean t = true;
boolean f = false, b;
b = (t & ((i++) == 0));
b = (f & ((i+=2) …Run Code Online (Sandbox Code Playgroud)