如果我有Java方法:
public void foo (int a)
{
//do something
}
然后我称之为这个方法:
foo (2/0) or foo (2/4)
何时评估2/0
或2/4
?是否在进入函数输入之前进行了评估?或者在调用函数之前对其进行评估? (在函数内部或外部进行评估?)
另外,请考虑:
if (true) then { A } else { B }
我知道A会被评估。但是,即使java是一种渴望的语言,B也不会被评估?
谢谢!
答案 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不会评价。这就是条件表达式的工作原理。评估两种表达都没有意义。