Java中的逻辑运算符优先级

用户名

我对此不满意:http : //docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.22它明确指出以下内容:

“如果操作数表达式没有副作用,则每个运算符都是可交换的。”

“这些运算符具有不同的优先级,&的优先级最高,|的优先级最低”。

JVM为何不遵守自己的规则。以下面的示例为例。

public static void main(String[] args){
    boolean bool = isTrue1() | isFalse1() & isFalse2() ;
    System.out.println("Result : " + bool);
}

public static boolean isFalse1() {
    System.out.println("1 : " + false);
    return false ;
}
public static boolean isFalse2() {
    System.out.println("2 : " + false);
    return false ;
}
public static boolean isTrue1() {
    System.out.println("3 : " + true);
    return true ;
}

结果是:

3 : true
1 : false
2 : false
Result : true

虽然实际结果应该是,根据&运算符先于| 运营商:

1 : false
2 : false
3 : true
Result : true

一些关于为什么未正确实施的解释会很好。即使在第二部分周围加上括号,也不会使用正确的优先级。

Sotirios Delimanolis

“这些运算符具有不同的优先级,&的优先级最高,|的优先级最低”。

仅仅因为它们具有更高的优先级,并不意味着它们的操作数将首先被评估。

这个

boolean bool = isTrue1() | isFalse1() & isFalse2() ;

等于

boolean bool = isTrue1() | ( isFalse1() & isFalse2() ) ;

那是所有优先事项。

正如Java语言规范所说,运算符操作数是从左到右求值的。

Java编程语言保证运算符的操作数似乎按照特定的评估顺序(即从左到右)进行评估。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java中的逻辑运算符优先级

来自分类Dev

Shell逻辑运算符&&,||的优先级

来自分类Dev

Shell逻辑运算符&&,||的优先级

来自分类Dev

增量和逻辑运算符优先级

来自分类Dev

xpath逻辑运算符AND和OR的优先级,不带括号

来自分类Dev

逻辑运算符相对于分号的优先级

来自分类Dev

逻辑运算符相对于分号的优先级

来自分类Dev

逻辑与和逻辑或运算符优先级

来自分类Dev

逻辑AND和逻辑OR运算符优先级

来自分类Dev

Java OR运算符优先级

来自分类Dev

Java运算符优先级

来自分类Dev

Java中运算符的优先级

来自分类Dev

bash中短循环逻辑运算符的优先级(和关联性)是什么

来自分类Dev

JavaScript中具有三元条件和逻辑的运算符优先级和运算符

来自分类Dev

Java:前置,后缀运算符优先级

来自分类Dev

带赋值的Java运算符优先级

来自分类Dev

困惑的Java运算符优先级演算结果

来自分类Dev

Java运算符优先级示例

来自分类Dev

Java 后缀运算符优先级

来自分类Dev

PHP中的运算符优先级

来自分类Dev

Swift中的运算符优先级重载

来自分类Dev

Haskell中的中缀运算符优先级

来自分类Dev

C中的移位运算符优先级

来自分类Dev

Haskell中的运算符和函数优先级

来自分类Dev

c中运算符的优先级

来自分类Dev

C中运算符优先级的奇怪结果

来自分类Dev

EXCEL中运算符优先级的顺序

来自分类Dev

C ++中的运算符优先级

来自分类Dev

C中的短路和运算符优先级