优先级,从上往下( 网上都是,选自某某无私同志的奉献)
问题描述 短路或和三目运算问题
我的源码
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);
}
站长提醒
在实际开发中,各种我们不能控制的问题都会出现,通过这一次,我对小括号的运用会根据频繁,也提醒大家,在比较复杂的判断中,把小括号运用进去。