java – for循环的“count limit”表达式只会被评估一次,还是每
发布时间:2020-12-15 02:54:49 所属栏目:Java 来源:网络整理
导读:如果我在循环的条件语句中调用方法,是否会在每次循环迭代时调用它? 例如: for( int i = 0; i = expensiveComputation(); i++ ) { // Do something.} 我会在每次迭代中执行昂贵的Computation()吗?或者,在循环变量初始化的同时,是否会在每次迭代中存储和使
如果我在循环的条件语句中调用方法,是否会在每次循环迭代时调用它?
例如: for( int i = 0; i <= expensiveComputation(); i++ ) { // Do something. } 我会在每次迭代中执行昂贵的Computation()吗?或者,在循环变量初始化的同时,是否会在每次迭代中存储和使用expensiveComputation()的结果? 我应该重新写它: int max = expensiveComputation(); for ( int i = 0; i <= max; i++ ) { // Do something. } 解决方法
除非编译器/优化器确定它没有副作用并且可能将调用作为优化消除,否则将在每次迭代时调用它.
我的意思是,编译器不能盲目地存储该值,因为java中的函数与数学函数不同,不仅可以具有返回值,还可以具有将某些内容打印到某个流或改变某些全局状态等的副作用. 还有另一个原因,为什么编译器不能在每次迭代时省略调用.您的函数不接受任何参数的事实并不意味着它每次都必须返回相同的值.例如,它可以从流中输入一个数字并将其返回,或者它可以随机生成一个数字. 因此编译器在安全地消除调用之前需要非常小心.所以,如果功能很昂贵,你一定要预先存储它的价值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |