广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

    你知道Java中&&和||放一个表达式中怎么执行吗?

    来源:网络收集  点击:  时间:2024-01-27
    【导读】:
    编程语言要按人的逻辑处理各种问题,因此就会出现好多运算符来适应不同的场景。复杂的场景,可能有多个运算符在一起的情况,这种情况有一点迷糊,就会搞错本文就分享java语言中和||运算符在一块时,是怎么执行的工具/原料morejavaIntelliJ IDEA方法/步骤1/8分步阅读

    在java中运算符和||的优先级是一样的。

    看看这段代码的执行结果是什么

    Show me the code.

    Code:

    package chapter4;

    /**

    * Created by MyWorld on 2016/3/20.

    */

    public class OperatorAndOrDemo {

    public static void main(String args) {

    if (iAmFalse() (iAmTrueNo1() || iAmTrueNo2())) {

    System.out.println(Main:Result is true);

    } else {

    System.out.println(Main:Result is false);

    }

    }

    private static boolean iAmTrueNo1() {

    System.out.println(Has invoked! Im iAmTrueNo1());

    return true;

    }

    private static boolean iAmTrueNo2() {

    System.out.println(Has invoked! Im iAmTrueNo2());

    return true;

    } private static boolean iAmFalse() {

    System.out.println(Has invoked! Im iAmFalse());

    return false;

    }

    }

    2/8

    看看执行结果:

    Has invoked! Im iAmFalse()

    Main:Result is false

    3/8

    分析下原因:

    只调用了前面的iAmFalse() 方法,小括号中方法一个也没有调用

    不是说好的,小括号的优化级最高嘛。

    是的,的确小括号的优化级最高,但并不是说小括号里的表达式先执行了!!

    小括号内的表达式和iAmFalse()使用连接,

    因为小括号的优化级最高,因此小操作里面的iAmTrueNo1() || iAmTrueNo2()作为一个整体来运算

    由于iAmFalse()在运算符的左边,就先执行了。

    因为iAmFalse()的返回值是false,有短路功能,从左到右运算,有一个为false就直接返回结果了。

    4/8

    为了验证刚才说的,把iAmTrueNo1() || iAmTrueNo2()外面的小括号去掉看看呢

    Code:

    if (iAmFalse() iAmTrueNo1() || iAmTrueNo2()) {

    5/8

    看看执行结果:

    Has invoked! Im iAmFalse()

    Has invoked! Im iAmTrueNo2()

    Main:Result is true

    6/8

    分析下原因:

    iAmFalse() iAmTrueNo1() || iAmTrueNo2()

    上面这个表达式中涉及的操作符的优化级是一样的,

    按照从左到右的原则,

    (1)iAmFalse() iAmTrueNo1()先运算

    由于iAmFalse() 是false,按照的短路原则,表达式iAmTrueNo1()就不用执行了,因为已经不影响结果了

    (2)iAmFalse() iAmTrueNo1() 的运算结果是fale,再一看,后面的运算符是||,要想得到整体表达式的结果,||后面的表达式仍然需要运算,

    执行iAmTrueNo2(),结果是true

    按照||操作符的原则,

    false||iAmTrueNo2()的结果是true

    7/8

    按照上面的逻辑,不使用小括号,

    if中表达式怎么改下顺序,才能让这三个函数都执行呢?

    分析一下:

    iAmFalse()

    iAmTrueNo1()

    iAmTrueNo2()

    三个表达式,2true 1false

    和||都有短路功能,是遇到false知道,||是遇到true短路

    因此能够触发短路的表达式不能放一块,

    即iAmFalse() 不与使用与另外两个表达式相连

    iAmFalse()只能使用||与其它表达式关联,

    只有这一种形式:iAmFalse() ||true

    如果上面表达式后面是||操作符,就触发短路操作了,因此只能是操作符

    得到结果:

    iAmFalse()||iAmTrueNo1()iAmTrueNo2()

    (因此iAmTrueNo2()和iAmTrueNo1()的逻辑含义是一样的,当然也互换位置了)

    Code:

    if (iAmFalse() || iAmTrueNo1() iAmTrueNo2()) {

    8/8

    执行下,看看执行结果与上面分析的是否一致

    Has invoked! Im iAmFalse()

    Has invoked! Im iAmTrueNo1()

    Has invoked! Im iAmTrueNo2()

    Main:Result is true

    OK,是一致的

    O了

    JAVA短路
    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_8218.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-05 15:44:09  耗时:0.024
    0.0243s