Java 有趣的布尔语法

Java 有趣的布尔语法,java,boolean,Java,Boolean,我最近碰到了一些奇怪的事情。考虑以下方法: public boolean addAll(Collection<T> col) { boolean added = false; for(T t : col) added |= add(t); return added; } public boolean addAll(集合列){ 布尔加法=假; for(T:col) 添加|=添加(t); 增加了退货; } 虽然我知道这是什么意思,但如果它至

我最近碰到了一些奇怪的事情。考虑以下方法:

public boolean addAll(Collection<T> col) {
    boolean added = false;

    for(T t : col)
        added |= add(t);

    return added;
}
public boolean addAll(集合列){
布尔加法=假;
for(T:col)
添加|=添加(t);
增加了退货;
}

虽然我知道这是什么意思,但如果它至少超过一次(如果后面的元素失败),就不要将其更改为false。但这究竟意味着什么呢。它是怎么读的。在
boolean
中是否有类似的小工具

操作符
|=
与此等价:

added = ( added | add(t) );

|=
运算符与此等效:

added = ( added | add(t) );

它是按位或与等号组合的

同样地,如果它之前被设置为true(即
1
),如果您使用它按位或true或false(
1
0
),您将始终返回true(
1
)作为
0或1=1
1或1=1

它实际上与以下内容相同:

added = (added | add(t));

它是按位或与等号组合的

同样地,如果它之前被设置为true(即
1
),如果您使用它按位或true或false(
1
0
),您将始终返回true(
1
)作为
0或1=1
1或1=1

它实际上与以下内容相同:

added = (added | add(t));

你是说
|=
?我不确定您的
=|
语法是否有效。如果至少成功添加了一项,则添加的
为真。。下次试试SymbolHound:你是说
|=
?我不确定您的
=|
语法是否有效。如果至少成功添加了一项,则添加的
为真。。下次尝试SymbolHound:@MouseEvent:不确定这是否有效,但即使有效,
|
也会被延迟计算,这意味着如果左值已经为true,则不会调用
add()
函数,该函数是逻辑OR,其行为与按位OR不同。请参阅:@Mark:确实它是惰性计算的,逻辑OR会短路,而按位OR不会短路。@MouseEvent
| |=
不是有效的运算符。我知道按位运算符,但从来不知道布尔值也是这样工作的…@MouseEvent:不确定这是否有效,但即使有效,
|
是延迟计算的,这意味着如果左值已经为true,则不会调用
add()
函数,该函数是逻辑OR,其行为与按位OR不同。请参阅:@Mark:确实它是惰性计算的,逻辑OR将短路,而按位OR将不会短路。@MouseeEvent
| |=
不是有效的运算符。我知道按位运算符,但从来不知道布尔运算也是如此。。。