gpt4 book ai didi

java - 什么(在规范中)保证“非短路逻辑运算符实际上不会短路?”

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:14:44 24 4
gpt4 key购买 nike

这直接受到 this question 的启发.
有许多引用资料/陈述表明,当应用于 boolean 值时,位运算符不会短路。所以换句话说 boolean a = f() & g(),其中 f()g() 都返回 boolean 值,both 总是会被评估。
然而,JLS只说:

15.22.2 Boolean Logical Operators &, ^, and |
When both operands of a &, ^, or | operator are of type boolean or Boolean, then the type of the bitwise operator expression is boolean. In all cases, the operands are subject to unboxing conversion (§5.1.8) as necessary.

For &, the result value is true if both operand values are true; otherwise, the result is false.

For ^, the result value is true if the operand values are different; otherwise, the result is false.

For |, the result value is false if both operand values are false; otherwise, the result is true.

这如何保证两个操作数都被实际评估了?除了 xor 之外,如果其中一个参数(可能是第一个被评估的第二个/右边的)违反条件,您仍然可以中断并返回结果。
例如。 a & b 只需要将 b 评估为 false 即可将表达式评估为 false。

请注意:我不是在问它是否以这种方式实现(不短路) - 它肯定是。

我在问:

Would implementing it with short circuit violate language standard?

最佳答案

参见 JLS 15.7.2 Evaluate Operands before Operation

The Java programming language also guarantees that every operand of an operator (except the conditional operators &&, ||, and ? :) appears to be fully evaluated before any part of the operation itself is performed.

因此,如果您有运算符 &,则需要在计算最终结果之前对两个 操作数求值。

此外,该部分之前的部分明确要求需要首先评估任何二元运算符的左操作数。

关于java - 什么(在规范中)保证“非短路逻辑运算符实际上不会短路?”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9266514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com