此问题已在此处有答案:
What does "|=" mean? (pipe equal operator)(6个回答)
7年前关闭。
我需要关于这个奇怪的运算符|=
的帮助。你能给我解释一下这个代码是做什么的吗?
@Override
public boolean addAll(Collection<? extends E> c) {
boolean result = false;
for (E e : c) {
result |= add(e);
}
return result;
}
5条答案
按热度按时间kgsdhlau1#
这是一个速记:
其中
|
是按位OR运算符。gcxthw6b2#
代码使用
add()
方法添加Collection
的所有成员,该方法返回boolean
,指示add()
是否成功。addAll
方法所做的是如果任何添加成功,则返回true
,如果所有添加都失败,则返回false
。(这对我来说确实很奇怪,因为我只会在所有的加法都成功的情况下返回true
,但我离题了。所以你可以这样做:
但这有点冗长,因为您可以更直接地对
result
变量进行操作:因此,我们对
result
的旧值和add
的返回值进行逻辑OR运算,以获得新值。(注意:我们希望result
位于||
的右侧;这是因为||
“短路”,并且如果左侧是true
,则不会麻烦检查||
的右侧。因此,如果add(e)
和result
是相反的,如果result
是true
,则不会计算右侧-即不运行add()
方法。)不管是谁写的这个方法,他们决定要尽可能简洁,所以他们改变了:
致:
其与以下相同:
|
operator is a bitwise OR与逻辑OR不同,除了布尔值的效果基本相同,唯一的区别是|
没有上述的短路行为。Java中没有
||=
语法,这就是为什么使用按位OR,尽管即使它这样做了,它也可能会有上面提到的短路问题。7vux5j2d3#
它是result = result的简写|add(e)。管道是按位或运算符。
xzv2uavs4#
它是
result
和add(e)
的按位或运算,并将其赋值回result。hi3rlvi25#
or-assign操作符(
|=
)将LHS上的变量设置为它先前包含的值,并与RHS的求值结果进行OR运算。对于布尔类型(如本例),当值为true时,它将变量更改为包含true(否则没有净效应)。它不会 * 不 * 短路求值。该方法的总体效果是为参数集合的每个元素调用当前对象的
add
方法,如果对add
的任何调用返回true,则返回true(即,如果实际添加了任何内容,在对add
结果含义的合理假设下...)