java布尔三目运算符_与三元运算符的Java布尔优先级比较

看来你对“更高优先级”的含义感到困惑.让我们用一个简单的例子来解释:

运算符*的优先级高于运算符”.这意味着表达式a * b c的评估类似于(a * b)c.这同样适用于&&运算符和三元运算符:

&安培;&安培;优先级高于运算符? :.这意味着表达式a&& b?c:d被评估为(a&& b)?c:d.

因此,运算符优先级的工作方式与示例中记录的相同.它完全符合您的要求:

if (a.getItem() != null && a.getItem().getOtherItem() != null?

true:a.getItem().getOtherItem().getSomevalue())

如果a.getItem()不为null且a.getItem().getOtherItem()不为null,则为true,否则为a.getItem().getOtherItem().getSomevalue().因此,当其中任何一个值为null时,代码将尝试计算将产生NullPointerException的第三个术语.

目前尚不清楚你真正想要实现的目标.在你的第二个例子中,你说:

if (a.getItem() != null && (a.getItem().getOtherItem() != null?

true: a.getItem().getOtherItem().getSomevalue()))

所以你想要解释a.getItem()为null时为false的情况,但是在括号中你要求解释a.getItem().getOtherItem()不为null时的情况,而a.getItem是这样的情况().getOtherItem()为null应该导致在您刚刚证明为null的引用上调用getSomevalue().

您最可能想要做的是评估a.getItem().getOtherItem().getSomevalue()如果所有值都不为null:

if (a.getItem() != null && a.getItem().getOtherItem() != null?

a.getItem().getOtherItem().getSomevalue(): false)

请注意,您可以在没有三元运算符的情况下表达相同的内容.等同的陈述是:

if (a.getItem() != null && a.getItem().getOtherItem() != null

&& a.getItem().getOtherItem().getSomevalue())

在这种情况下,回落值应该像在里面一样真实

if (a.getItem() != null && a.getItem().getOtherItem() != null?

a.getItem().getOtherItem().getSomevalue(): true)

同样可以表示为

if (a.getItem() == null || a.getItem().getOtherItem() == null

|| a.getItem().getOtherItem().getSomevalue())

无论何时在复合布尔表达式中看到true或false,都可以确定存在错误.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值