运算符优先级关系之开发代码bug(非常实用啊)

优先级,从上往下( 网上都是,选自某某无私同志的奉献

在这里插入图片描述

问题描述 短路或和三目运算问题

我的源码

if (!b.getStatus().equals(constant.DEVICE_BOX_STATUS_NORMAL)
                    || dm.getArticleStatusEnable().equals("1") ? b.getArticle() != constant.SC_BOX_NOT_ARTICLE_NORMAL : false
                    || dm.getDoorStatusEnable().equals("1") ? b.getOpen() != constant.BOX_NOT_OPEN_STATUS_NORMAL : false) {
                list.add(b);
            }

分析bug

 			//短路或||的优先级比三目高,运算顺序是从左往右
            //三目运算运算顺序是从右往左
            //这个公式应该是true的,由于先是短路或的运算,遇到了第一个三目运算,
            // 三目运算就把true ? false : false || true ? true : false这一整个看成一个整体,等于true ? false : (false || true ? true : false)
            //所以最后结果为fale
           if (false || true ? false : false || true ? true : false) {
                list.add(b);
            }

解析

//在每个三目运算哪里都加个括号,这样把每个三目运算优先级提高。
if (!b.getStatus().equals(constant.DEVICE_BOX_STATUS_NORMAL)
                    || (dm.getArticleStatusEnable().equals("1") ? b.getArticle() != constant.SC_BOX_NOT_ARTICLE_NORMAL : false)
                    || (dm.getDoorStatusEnable().equals("1") ? b.getOpen() != constant.BOX_NOT_OPEN_STATUS_NORMAL : false)) {
                list.add(b);
            }

站长提醒
在实际开发中,各种我们不能控制的问题都会出现,通过这一次,我对小括号的运用会根据频繁,也提醒大家,在比较复杂的判断中,把小括号运用进去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值