返回 for 循环或外循环

2022-09-01 01:23:04

今天,有人请我去Java中对关键字的不良使用。我写了一个简单的循环来验证数组中是否有东西。假设是一个长度数组,这是我的代码:returnforarrayn

for (int i = 0; i < array.length; ++i) {
    if (array[i] == valueToFind) {
        return true;
    }
}
return false;

现在有人告诉我,这不是很好的编程,因为我在循环中使用语句,这会导致垃圾回收出现故障。因此,更好的代码是:return

int i = 0;
while (i < array.length && array[i] != valueToFind) {
    ++i;
}
return i != array.length;

问题是,我无法正确解释为什么第一个for循环不是一个好的做法。有人可以给我一个解释吗?


答案 1

现在有人告诉我,这不是很好的编程,因为我在循环中使用 return 语句,这会导致垃圾回收出现故障。

这是不正确的,并建议你应该以一定程度的怀疑态度对待那个人的其他建议。

“只有一个 return 语句”(或者更一般地说,只有一个退出点)的口头禅在你必须自己管理所有资源的语言中很重要 - 这样你就可以确保将所有清理代码放在一个地方。

它在Java中用处不大:一旦你知道你应该返回(以及返回值应该是什么),就返回。这样,阅读起来就更简单了 - 您不必采用该方法的其余任何一个来计算出还将发生的其他事情(块除外)。finally


答案 2

现在有人告诉我,这不是很好的编程,因为我在循环中使用 return 语句,这会导致垃圾回收出现故障。

那是一堆垃圾。方法中的所有内容都将被清理,除非在类或其他地方有对它的其他引用(这是封装很重要的原因)。根据经验,通常最好使用一个 return 语句,因为这样更容易确定方法将退出的位置。

就个人而言,我会写:

Boolean retVal = false;
for(int i=0; i<array.length; ++i){
    if(array[i]==valueToFind) {
        retVal = true;
        break; //Break immediately helps if you are looking through a big array
    }
}
return retVal;