Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么下面的表达式返回true?_Java_Operators_Short Circuiting - Fatal编程技术网

Java 为什么下面的表达式返回true?

Java 为什么下面的表达式返回true?,java,operators,short-circuiting,Java,Operators,Short Circuiting,我很难理解Java中短路运算符的优先级。根据短路行为,表达式“true | | true”的右侧部分在此不重要,因为一旦“&&”条件的第一部分被计算为“false”,表达式的其余部分就不应该被计算 但是,当执行下面的代码时,我看到结果声明为“true”。有人能给我解释一下吗 public class ExpressionTest{ public static void main(String[] args) { boolean result1 = fals

我很难理解Java中短路运算符的优先级。根据短路行为,表达式“true | | true”的右侧部分在此不重要,因为一旦“&&”条件的第一部分被计算为“false”,表达式的其余部分就不应该被计算

但是,当执行下面的代码时,我看到结果声明为“true”。有人能给我解释一下吗

    public class ExpressionTest{
        public static void main(String[] args) {
        boolean result1 = false && true || true;
        System.out.println(result1);
        }
    }
在操作员身上检查这个。该表清楚地显示,
&&
的优先级高于
|

所以

评估结果如下:

(false && true) || true;
Rest我认为您可以自己进行评估。

请在操作员上检查这一点。该表清楚地显示,
&&
的优先级高于
|

所以

评估结果如下:

(false && true) || true;
休息我想你可以自己评估。

来自

同一行上的运算符具有相同的优先级。当 相同的优先级出现在同一表达式中,必须以规则为准 首先对其进行评估。除 赋值运算符从左到右求值;分配 操作符从右向左求值

因此,编译器将其解析为

boolean result1 = (false && true) || true;
因此,
A | | true
返回
true
,而不考虑
A

要获得理想的表达式,请执行以下操作:

boolean result1 = false && (true || true);

同一行上的运算符具有相同的优先级。当 相同的优先级出现在同一表达式中,必须以规则为准 首先对其进行评估。除 赋值运算符从左到右求值;分配 操作符从右向左求值

因此,编译器将其解析为

boolean result1 = (false && true) || true;
因此,
A | | true
返回
true
,而不考虑
A

要获得理想的表达式,请执行以下操作:

boolean result1 = false && (true || true);

谢谢你的回复!我现在明白了为什么表达式的计算结果为“true”。但是,为什么编译器会选择(false&&true)| true的求值策略呢。相反,它可以在1985年看到“&&”操作符之前的一个“false”之后忽略语句的其余部分。Java从左到右计算表达式。就是这样,谢谢!这就向我解释了。谢谢你的回复!我现在明白了为什么表达式的计算结果为“true”。但是,为什么编译器会选择(false&&true)| true的求值策略呢。相反,它可以在1985年看到“&&”操作符之前的一个“false”之后忽略语句的其余部分。Java从左到右计算表达式。就是这样,谢谢!这就向我解释了。谢谢你的回复!Java教程现在让我明白了,从左到右的评估是这里的关键。谢谢你的回复!Java教程现在让我明白了,从左到右的求值是这里的关键。