为了账号安全,请及时绑定邮箱和手机立即绑定

为什么执行“boolean t = true,b; b = (t || ((i++) == 0))”

为什么执行“boolean t = true,b; b = (t || ((i++) == 0))”

慕娘9325324 2023-10-13 16:44:26
 int i = 0;  boolean t = true;  boolean f = false, b;  b = (t || ((i++) == 0));  b = (f || ((i+=2) > 0));  System.out.println(i);上述代码执行后,打印结果是2,而不是3,为什么呢?我发现“b = (t || ((i++) == 0))”通过调试执行后“i”是0而不是1。好吧,我很困惑为什么“i++”不改变“i”。
查看完整描述

1 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

好吧,我很困惑为什么“i++”不改变“i”。

因为i++不会在您提供的代码中执行。

在 形式的表达式中a || b,首先a计算,如果它为真(在本例中就是这样),b 则不计算该表达式。这称为短路

JLS 第 15.24 节对此进行了描述。

如果您将代码更改为使用非短路运算符|,如下所示:

b = (t | ((i++) == 0));

...然后它将无论如何评估两个操作数。


查看完整回答
反对 回复 2023-10-13
  • 1 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信