【发布时间】:2023-01-20 08:43:40
【问题描述】:
我有这行 Java 代码:
return getValue() != null ? getValue() : 0
getValue多久执行一次?一次还是两次?
编辑:如果这是编译器相关的,我对 Sun JDK 的编译器特别感兴趣。
【问题讨论】:
-
题外话:自动装箱是邪恶的,更喜欢明确的
valueOf(0)。
标签: java
我有这行 Java 代码:
return getValue() != null ? getValue() : 0
getValue多久执行一次?一次还是两次?
编辑:如果这是编译器相关的,我对 Sun JDK 的编译器特别感兴趣。
【问题讨论】:
valueOf(0)。
标签: java
如果 getValue() == null - 一次
如果 getValue() != null - 两次
【讨论】:
如果 getValue() 返回 null,则仅执行一次,如果第一次返回 null 以外的值,则执行两次。
【讨论】:
如果getValue() 返回一个非空值,两次。
public class Test {
public static void main(String[] args) {
Test t = new Test();
boolean x = t.doSomething()? t.doSomething():false;
}
public boolean doSomething(){
System.out.println("calling doSomething");
return true;
}
}
输出:
calling doSomething
calling doSomething
【讨论】:
return true;,它可能会被优化为一个电话。
清除答案:
从开发者的角度来看:
if getValue() == null - 将被调用一次
if getValue() != null - 将被调用两次
从 JIT 编译器的角度来看:
取决于编译器和您的方法。最多调用2次,最少调用0次。
【讨论】:
你能重新写一下吗?我不熟悉 Java,但在 C++ 中你可以说
return (x=getvalue()) != null ? x : 0
如果这在 Java 中行不通,您可以在返回之前移动赋值吗?它需要是单行吗?
x = getvalue();
return x != null ? x : 0
约翰 C>
【讨论】:
我有一个与您的问题相关的不同场景。我还想为一个变量设置一个值,该变量是三元运算符的结果,如下所示:
String thing = something == null ? "the other thing" : getSomethingElse();
那个代码仍然执行"getSomethingElse()" 即使是 "something"是无效的。
似乎三元运算符中的所有函数都在条件评估之前执行——与其他人给出的答案相反。
【讨论】: