繁体   English   中英

急切的Java评估:此示例如何工作?

[英]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/02/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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM