Java是否有惰性评估?

我知道Java在这种情况下具有智能/惰性评估:

public boolean isTrue() {

boolean a = false;

boolean b = true;

return b || (a && b); // (a && b) is not evaluated since b is true

}

但是关于:

public boolean isTrue() {

boolean a = isATrue();

boolean b = isBTrue();

return b || a;

}

isATrue()即使isBTrue()返回true 也被调用?

回答:

在Java(和其他类似C的语言)中,这称为 短路评估 。*

是的,在第二个示例isATrue中总是被调用。也就是说,除非编译器/

JVM可以确定它没有可观察到的副作用,否则在这种情况下它可以选择进行优化,但是无论如何您都不会注意到它们之间的差异。


  • 两者截然不同; 前者本质上是一种优化技术,而第二种则是该语言所强制要求的,并且会影响可观察的程序行为。

我最初建议这与惰性评估完全不同,但是正如@Ingo在下面的评论中指出的那样,这是一个可疑的断言。有人可能会将Java中的短路运算符视为惰性评估的一种非常有限的应用。

但是,当函数式语言强制执行惰性求值语义时,通常是出于完全不同的原因,即防止无限(至少是过度的)递归。

以上是 Java是否有惰性评估? 的全部内容, 来源链接: utcz.com/qa/407045.html

回到顶部