猿问

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

 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”。


慕娘9325324
浏览 91回答 1
1回答

翻阅古今

好吧,我很困惑为什么“i++”不改变“i”。因为i++不会在您提供的代码中执行。在 形式的表达式中a || b,首先a计算,如果它为真(在本例中就是这样),b 则不计算该表达式。这称为短路。JLS 第 15.24 节对此进行了描述。如果您将代码更改为使用非短路运算符|,如下所示:b = (t | ((i++) == 0));...然后它将无论如何评估两个操作数。
随时随地看视频慕课网APP

相关分类

Java
我要回答