对Java的热切评价:这个例子如何运作?

时间:2014-10-31 06:14:34

标签: java lazy-evaluation

如果我有Java方法:

public void foo (int a)
{
    //do something
}

然后我称之为这个方法:

foo (2/0)  or foo (2/4)

何时评估2/02/4?是否在进入函数输入之前进行了评估?或者在调用函数之前对其进行评估? (在函数内部或外部进行评估?)


另外,请考虑:

if  (true) then { A } else { B }

我知道A会被评估。但是,即使java是一种渴望的语言,B也不会被评估?

谢谢!

2 个答案:

答案 0 :(得分:1)

foo (2/0)foo (2/4)可能会被编译器评估并替换为常量结果(尽管前者应该在运行时导致ArithmeticException,所以我不确定如何编译器可以处理它。通常,foo(a/b)将在a/b的结果传递给foo之前进行评估。

在您的if声明中,如果条件为真,您将无法评估B.

答案 1 :(得分:0)

<强>问题1:

在编译时检查了类型,表达式在运行时计算。表达式首先求值,然后调用方法。

例如:

foo (2/0)

编译很好,你在运行时评估表达式时会遇到异常。

<强>问题2:

if (true)then{ A } else { B }

B不会评价。这就是条件表达式的工作原理。评估两种表达都没有意义。