2013-04-30 52 views
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个整数变量“current”?

+1

可能的重复http://stackoverflow.com/questions/4501482/java-declaring-variables-in-for-loops 和 http://stackoverflow.com/questions/8803674/declaring-variables-inside-或者在圈外 – asifsid88 2013-04-30 09:31:18

回答

3

没有difference.But 恕我直言通常你应该给variablessmallest scope你能够。所以declare它内部的循环到limit its scope。你也应该在变量被定义时初始化变量,这是另一个不在循环外部声明的原因。

+1

虽然我们最好的做法,它应该也可能是循环中的“最后”。 – Thilo 2013-04-30 09:35:04

+0

+1是的,这是非常重要的 – phlogratos 2013-04-30 09:36:13

+0

谢谢@Thilo为那个错过的点:) – 2013-04-30 09:36:35

2

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

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

+1

够聪明:) – 2013-04-30 09:31:34

+0

@downvoter。你为什么随机抽取一些我的答案? – Maroun 2013-04-30 17:16:25

+1

@ MAROUN.please无视这些downvotes没有正当理由,并继续帮助别人..没有人成为国王,没有人成为乞丐在这里:)移动... – 2013-04-30 17:46:01

1

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

2

它们具有完全相同的占地面积。他们甚至(不考虑一些变量编号)完全相同的字节码。你可以把这个在Test.java试试,编译​​它,并用“的javap -c测试”拆解

HTH :)