【发布时间】:2017-04-01 13:59:49
【问题描述】:
如果其中一个不返回 true,java 会在运行时调用所有三个函数吗?
通常出于调试目的,我喜欢在调试器中查看这些条件检查的结果,并将它们放在一行中会使这变得更加困难。如果有六次检查,那么代码就会变得更加不可读。
boolean result1 = CheckSomething();
boolean result2 = CheckSomethingElse();
boolean result3 = CheckSomeOtherThing();
boolean finalResult = result1 && result2 && result3;
如果 Java 没有在运行时优化这个条件,那么应该通过编写这样的代码来获得更好的性能,但代价是无法在调试器中轻松查看中间值。
boolean finalResult = CheckSomething() && CheckSomethingElse() && CheckSomeOtherThing();
【问题讨论】:
-
在你的最后一个例子中,如果
CheckSomething()返回 false 其他函数将不会被调用 -
@matiaselgart 那将是一个不同的问题。他问的是编译器是否会生成不同的字节码,而不是在布尔运算的结果已知(它不知道)之后评估是否继续。
-
如果这些函数中的任何一个有副作用,Java 需要在您的第一个代码 sn-p 中执行副作用。
-
@Stefan - 我不认为他只是在谈论不同的 字节码,因为他将其标记为
jit。字节码肯定不一样,但编译出来的代码肯定不一样。
标签: java optimization jit