gpt4 book ai didi

java - for 循环的 "count limit"表达式是只计算一次,还是在每次迭代时计算?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:49:37 24 4
gpt4 key购买 nike

如果我在循环的条件语句中调用一个方法,它会在每次循环迭代时被调用吗?

例如:

for( int i = 0; i <= expensiveComputation(); i++ ) {
// Do something.
}

我会在每次迭代中执行 expensiveComputation() 吗?或者 expensiveComputation() 的结果是否会在循环变量初始化的同时存储并在每次迭代中使用?

我应该改写成这样吗:

int max = expensiveComputation();
for ( int i = 0; i <= max; i++ ) {
// Do something.
}

最佳答案

它将在每次迭代时被调用,除非编译器/优化器决定它没有副作用并且可以作为优化消除调用。

我的意思是,编译器不能只是盲目地存储值,因为 java 中的函数与数学函数不同,它不仅可以有返回值,还可以有副作用,例如将某些内容打印到某个流或更改某些全局变量状态等

编译器不能省略每次迭代的调用还有另一个原因。您的函数不带任何参数的事实并不意味着它每次都必须返回相同的值。例如,它可以从流中输入一个数字并返回它,或者它可以随机生成一个数字。

所以编译器在安全地消除调用之前需要非常小心。所以,如果这个函数是昂贵的,你绝对应该预存它的值。

关于java - for 循环的 "count limit"表达式是只计算一次,还是在每次迭代时计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7274680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com