在下面的情况下,我是否需要担心性能并保存昂贵调用的结果,或者编译器是否认识到它可以执行一次昂贵的调用?
String name;
if (object.expensiveCall() != null) {
name = object.expensiveCall().getName();
}
最佳答案
编译器不会(通常)只执行一次调用,因为它可能有副作用,或者其结果可能不稳定——它不可能知道你什么时候想让它忽略第二次调用,什么时候你想要它实际上再次调用电话。您需要保存结果:
final ExpensiveCallResult nullableResult = object.expensiveCall();
String name;
if (nullableResult != null) {
name = nullableResult.getName();
}
关于Java 编译器优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9469537/