为什么执行"i"后"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,为什么?

我发现"i"在"b = (t ||((i++( == 0(("通过调试执行。好吧,我很困惑为什么"i++"不改变"i"。

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

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

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

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

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

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

。然后,无论如何,它都会评估这两个操作数。

相关内容

  • 没有找到相关文章

最新更新