我需要这个奇怪的操作员的帮助|=.你能解释一下这段代码的作用吗?
@Override
public boolean addAll(Collection<? extends E> c) {
boolean result = false;
for (E e : c) {
result |= add(e);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
这是一个简写:
result = result | add(e);
Run Code Online (Sandbox Code Playgroud)
其中|是按位OR运算符.
Collection该代码使用add()返回 a 的方法添加 a 的所有成员boolean,指示是否add()成功。该addAll方法的作用是true,如果任何添加成功或者false全部添加失败,则返回。true(这对我来说确实很奇怪,因为只有当所有添加都成功时我才会返回,但我离题了。)
所以你可以这样做:
\n@Override\npublic boolean addAll(Collection<? extends E> c) {\n boolean result = false;\n for (E e : c) {\n if (add(e)) {\n result = true;\n }\n }\n return result;\n}\nRun Code Online (Sandbox Code Playgroud)\n但这有点冗长,因为您可以result更直接地对变量进行操作:
@Override\npublic boolean addAll(Collection<? extends E> c) {\n boolean result = false;\n for (E e : c) {\n result = add(e) || result;\n }\n return result;\n}\nRun Code Online (Sandbox Code Playgroud)\n因此,我们将 的旧值result与 的返回值进行逻辑“或”运算add以获得新值。(注意:我们希望result位于 的右侧||;这是因为“短路”,并且如果左侧是 ,则||不会费心检查 an 的右侧)。因此,如果和是相反的情况,它不会评估右侧 \xe2\x80\x94 ,即不运行方法\xe2\x80\x94 一次。)||trueadd(e)resultadd()resulttrue
编写该方法的人决定尽可能简洁,因此他们进行了更改:
\nresult = add(e) || result;\nRun Code Online (Sandbox Code Playgroud)\n到:
\nresult |= add(e);\nRun Code Online (Sandbox Code Playgroud)\n与以下内容相同:
\nresult = result | add(e);\nRun Code Online (Sandbox Code Playgroud)\n该|运算符是按位“或”,与逻辑“或”不同,但布尔值除外,其效果基本相同,唯一的区别是不|具有上述短路行为。
Java 中没有||=语法,这就是使用按位 OR 的原因,尽管即使这样做,它也可能会出现与上面提到的相同的短路问题。