Java中的逻辑运算符优先级

 时尚经典语录覀--- 发布于 2023-01-29 14:05

我对此并不满意: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

一些解释很好,为什么这没有正确实现.即使在第二部分周围添加括号,也不会使用正确的优先级.

1 个回答
  • "这些运算符具有不同的优先级,具有最高优先级和最低优先级".

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

    这个

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

    变得等同于

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

    这都是优先权.

    正如Java语言规范所述,操作员操作数从左到右进行评估.

    Java编程语言保证运算符的操作数似乎以特定的评估顺序进行评估,即从左到右.

    2023-01-29 14:09 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有