我有这行Java代码:
return getValue() != null ? getValue() : 0
getValue
多久会执行一次?一两次?
编辑:如果这是依赖于编译器的,我对Sun JDK中的编译器特别感兴趣。
答案 0 :(得分:4)
如果getValue()== null - 一次
如果getValue()!= null - 两次
答案 1 :(得分:3)
如果getValue()返回null,则只返回一次,如果第一次返回的值不是null,则返回两次。
答案 2 :(得分:2)
清除答案:
从开发人员的角度来看:
如果getValue()== null - 将被调用一次
如果getValue()!= null - 将被调用两次
从JIT-Compiler角度来看:
取决于编译器和您的方法。它最多被称为2次,至少是0次。
答案 3 :(得分:2)
如果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
答案 4 :(得分:2)
return (x=getvalue()) != null ? x : 0
如果这在Java中不起作用,你可以在返回之前移动作业吗?它需要是一行吗?
x = getvalue();
return x != null ? x : 0
John C>
答案 5 :(得分:0)
我有一个与您的问题相关的不同场景。我还想将一个值设置为一个变量,该变量是三元运算符的结果,如下所示:
String thing = something == null ? "the other thing" : getSomethingElse();
代码仍会执行“getSomethingElse()”即使“某事” 为空。
三元运算符中的所有函数似乎都是在对条件进行评估之前执行的 - 与其他人给出的答案相反。