for循环的内存占用

时间:2013-04-30 09:26:44

标签: java

我有以下代码:

for (int i = 0; i < array.length; i++) {
  int current = array[i];
  //do something with current...
}

和功能

int current = 0;
for (int i = 0; i < array.length; i++) {
  current = array[i];
  //do something with current...
}

我的问题是,他们是否有相同的内存占用? 我的意思是,很明显第二个函数只有1个变量“current”。但是第一个功能呢?假设数组的长度为1000,这是否意味着将在内循环中创建1000个整数变量“current”?

4 个答案:

答案 0 :(得分:3)

没有区别。但是恕我直言你通常应该variables smallest scope你可以。所以declarelimit its scope的循环中。您还应该在定义变量时初始化变量,这是不在循环外声明变量的另一个原因。

答案 1 :(得分:2)

没有区别。通过进行正确的优化,编译器足够智能,可以为两种情况生成类似的字节码

如果你想在循环之外使用变量,在它之外声明它,否则,为了给变量赋予最小范围,在循环中声明它(并考虑在这种情况下使其成为最终)。

答案 2 :(得分:2)

它们具有完全相同的足迹。它们甚至具有(不考虑某些变量编号)完全相同的字节码。你可以尝试把它放在Test.java中,编译它并用“javap -c Test”反汇编它

HTH:)

答案 3 :(得分:1)

这两个代码片段是等效的。甚至可以编译成完全相同的字节码(有人会反编译它)。每个只创建一个局部变量(在循环中重用)。