Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java的渴望评估:这个例子是如何工作的?_Java_Lazy Evaluation - Fatal编程技术网

Java的渴望评估:这个例子是如何工作的?

Java的渴望评估:这个例子是如何工作的?,java,lazy-evaluation,Java,Lazy Evaluation,如果我有一个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 } 我知道你会被评估的。然而,即使java是一种渴望的语言,B也不会被计算 谢谢

如果我有一个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 }
我知道你会被评估的。然而,即使java是一种渴望的语言,B也不会被计算

谢谢大家!

foo(2/0)
foo(2/4)
可能由编译器计算并由常量结果替换(尽管前者在运行时会导致
算术异常
,因此我不确定编译器如何处理它。通常,
foo(a/b)
将在
a/b
的结果传递给
foo
之前进行评估


在您的
if
语句中,如果条件为真,则不会对B进行评估,这是正确的。

问题1:

if (true)then{ A } else { B }
类型在编译时已检查,表达式在运行时求值。表达式先求值,然后方法调用

例如:

foo (2/0)
这样编译很好,在运行时计算表达式时会出现异常

问题2:

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

B不会计算。这就是条件表达式的工作方式。计算这两个表达式没有意义。

这段代码不是Java。如果发布Java代码,请确保它首先编译!Java使用按值调用机制,即当您调用使用惰性计算策略的函数时,首先计算参数,然后将其传递给fu不协调ᴜʀᴇsʜᴀᴛᴛᴀ 嗯,我在我的Eclipse IDE中尝试了这段代码,它在运行时编译并抛出一个异常。我猜编译器没有对其进行优化。是的。很公平。在这里也尝试过。:)在运行时,2/4在函数内部或外部求值?公共void foo(inta){a+1}。当它进入方法内部并执行a+1时,a已经是0.5或仍然是未计算的2/4?@Sonya它是在方法外部计算的。该方法实际上会得到0,而不是0.5,因为它是int的一个除法,结果是int。