[英]Eager evaluation for Java: How does this example work?
如果我有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也不会评估?
谢谢!
foo (2/0)
或foo (2/4)
可能由编译器求值并由常量结果代替(尽管前者应在运行时引起ArithmeticException
,因此我不确定编译器如何处理它。通常,在将a/b
的结果传递给foo
之前,将对foo(a/b)
进行求值。
在if
语句中,如果条件为真,那么将不会对B进行评估是正确的。
问题1:
类型已在编译时检查,并且表达式在运行时求值。 表达式首先求值,然后是方法调用。
例如 :
foo (2/0)
这样可以很好地进行编译,并且在运行时评估表达式时会得到异常。
问题2:
if (true)then{ A } else { B }
B不会评估。 这就是条件表达式的工作方式。 评估两种表达方式都没有意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.