【发布时间】:2011-01-29 23:56:55
【问题描述】:
我要在 Java 中进行一系列比较,我想知道其中一个或多个是否正确。比较字符串很长且难以阅读,因此为了便于阅读,我将其拆分,并自动使用快捷运算符|= 而不是negativeValue = negativeValue || boolean。
boolean negativeValue = false;
negativeValue |= (defaultStock < 0);
negativeValue |= (defaultWholesale < 0);
negativeValue |= (defaultRetail < 0);
negativeValue |= (defaultDelivery < 0);
如果任何默认negativeValue 为真。这是有效的吗?它会达到我的预期吗?我在 Sun 的网站或 stackoverflow 上看不到它,但 Eclipse 似乎没有问题,并且代码可以编译并运行。
同样,如果我想执行几个逻辑交叉,我可以使用&= 代替&&吗?
【问题讨论】:
-
你为什么不试试呢?
-
这是一般的布尔逻辑,不仅仅是 Java。所以你可以在其他地方查找它。你为什么不试试呢?
-
@Dykam:不,这里有特定的行为。 Java可以选择使 |= 短路,这样如果 LHS 已经为真,它就不会评估 RHS - 但它不会。
-
@Jon Skeet:短路适用于不存在的
||=运算符,但|=是按位或运算符的组合形式。 -
@Jon Skeet: 当然可以,但是让
|=短路会与其他复合赋值运算符不一致,因为a |= b;与a = a | b;不同,通常需要注意的是评估a两次(如果重要的话)。在我看来,大语言行为决定没有||=,所以我错过了你的意思。
标签: java assignment-operator compound-assignment or-operator