我应该在for-each循环中初始化数组?

时间:2012-11-21 02:50:38

标签: java loops foreach

以下是否会产生不必要的内存使用

    String[] words = text.split(" ");
    for (String s : words)
    {...}

或者每次重复循环时都会调用text.split(" ")

    for (String s : text.split(" "))
    {...}

哪种方式更可取?

3 个答案:

答案 0 :(得分:6)

编写循环的每种方式都有优点:

  • 第一种方式更可调试:您可以在for上设置断点,并检查words
  • 第二种方法避免在名称空间中引入名称words,因此您可以在其他位置使用该名称。

就性能和可读性而言,两种方式都同样好:split将在循环开始之前调用一次,因此使用第二个代码片段不会产生性能或内存使用后果。

答案 1 :(得分:1)

因为,我认为在性能方面没有区别:

String[] words = text.split(" ");
for (String s : words)
{...}
应该使用

,因为您仍然可以使用text.split(" ")生成的单词进行进一步的数据操作。在第二种方法中,您只能使用循环内的单词。

答案 2 :(得分:0)

在下面的代码中,getList()只被调用一次。 所以我认为你提出的两种方式在性能方面没有差异。

class Test {

    static int[] list = {1,2,3,4,5};

    static int[] getList() {
        System.out.println("getList executed");
        return list;
    }

    public static void main(String[] args) {
        for(int n: getList()) {
            System.out.println("n = "+n);
        }
    }
}

输出:

getList executed
n = 1
n = 2
n = 3
n = 4
n = 5