在三元运算符中调用函数的频率是多少?

时间:2009-10-15 13:02:16

标签: java

我有这行Java代码:

return getValue() != null ? getValue() : 0

getValue多久会执行一次?一两次?

编辑:如果这是依赖于编译器的,我对Sun JDK中的编译器特别感兴趣。

6 个答案:

答案 0 :(得分:4)

如果getValue()== null - 一次

如果getValue()!= null - 两次

答案 1 :(得分:3)

如果getValue()返回null,则只返回一次,如果第一次返回的值不是null,则返回两次。

答案 2 :(得分:2)

清除答案:

从开发人员的角度来看:

如果getValue()== null - 将被调用一次

如果getValue()!= null - 将被调用两次

从JIT-Compiler角度来看:

取决于编译器和您的方法。它最多被称为2次,至少是0次。

  • 如果不为空则两次;编译器没有优化;或该方法有副作用
  • 首次调用getValue()时为零次总是返回null并且没有副作用且编译器执行该优化

答案 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)

你可以重新写一下吗?我不熟悉Java,但在C ++中你可以说

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()”即使“某事” 为空。

三元运算符中的所有函数似乎都是在对条件进行评估之前执行的 - 与其他人给出的答案相反。