在下面的例子中:
for(int i=0; i<10; i++) {
int k;
}
循环体(即“int k”语句)是否会重复执行10次?
如果是这样,是否意味着每次都会创建一个新变量 k? (因为这种“类型后跟变量名”的格式被定义为在JAVA中创建一个新变量,尽管变量名保持不变)
最佳答案
不,变量的内存存在于方法中,而不是在循环中。您只能在循环内访问 k
这一事实是由编译器完成的。
如果您要像这样更改代码:
public class X
{
public static void main(final String[] argv)
{
for(int i = 0; i < 10; i++)
{
int k = i * 2;
System.out.println(k);
}
}
}
然后运行 javap -c X 来查看您将看到的字节码:
0: iconst_0
1: istore_1 // i = 0
2: iload_1
3: bipush 10
5: if_icmpge 25 // i < 10
8: iload_1
9: iconst_2
10: imul
11: istore_2 // k = i * 2 < this is the key (see below)
12: getstatic
15: iload_2 // this gets k (see below)
16: invokevirtual #3
19: iinc 1, 1 // i++
22: goto 2
25: return
istore_2
将计算结果存储到堆栈的第二个位置。 iload_2
获取堆栈中第二个位置的值。 (可以看说明书的说明here)
栈是一直存在的,把它想象成一个数组,方法可以访问其中的某一部分。
关于java - 每次循环都创建一个新变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39094164/