我有以下代码:
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”?
答案 0 :(得分:3)
没有区别。但是恕我直言你通常应该variables
smallest scope
你可以。所以declare
在limit its scope
的循环中。您还应该在定义变量时初始化变量,这是不在循环外声明变量的另一个原因。
答案 1 :(得分:2)
没有区别。通过进行正确的优化,编译器足够智能,可以为两种情况生成类似的字节码。
如果你想在循环之外使用变量,在它之外声明它,否则,为了给变量赋予最小范围,在循环中声明它(并考虑在这种情况下使其成为最终)。
答案 2 :(得分:2)
它们具有完全相同的足迹。它们甚至具有(不考虑某些变量编号)完全相同的字节码。你可以尝试把它放在Test.java中,编译它并用“javap -c Test”反汇编它
HTH:)
答案 3 :(得分:1)
这两个代码片段是等效的。甚至可以编译成完全相同的字节码(有人会反编译它)。每个只创建一个局部变量(在循环中重用)。