2

我有以下代码:

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 个变量“当前”。但是第一个功能怎么样。让我们假设数组的长度为 1000,这是否意味着将在内部循环中创建 1000 个整数变量“当前”?

4

4 回答 4

3

没有区别。但是恕我直言, 您通常应该给variablessmallest scope可以。所以declare它在循环内部limit its scope。您还应该在定义变量时对其进行初始化,这是不在循环外声明它的另一个原因。

于 2013-04-30T09:33:49.913 回答
2

没有区别。编译器足够聪明,可以通过正确的优化为这两种情况生成相似的字节码。

如果要在循环外使用变量,请在循环外声明,否则,为了给变量最小范围,请在循环内声明(并考虑在这种情况下将其设为 final)。

于 2013-04-30T09:29:23.397 回答
2

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

HTH :)

于 2013-04-30T09:33:11.000 回答
1

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

于 2013-04-30T09:30:11.183 回答