循环中局部变量的空间分配



(true或false(每当执行循环体时,都会分配在循环体中声明的局部变量的空间,而当循环体结束时,则会释放该空间。

这个问题的答案是错误的。但为什么呢?

该语句为false,因为未分配和释放局部变量空间。它存在于堆栈中,并且在输入方法时被保留。

要了解堆栈空间是如何使用的,请使用编写一个小型测试程序

public static void test() {
{
int a = 1;
long b = 2;
int c = 3;
}
{
int x = 4;
int y = 5;
long z = 6;
}
}

现在使用以下命令对其进行反汇编,以查看字节码。

javap -c Test.class

这是输出。为了方便起见,我在右边添加了Java代码。

public static void test();
Code:
0: iconst_1                     int a = 1;
1: istore_0
2: ldc2_w     #22   long 2l     long b = 2;
5: lstore_1
6: iconst_3                     int c = 3;
7: istore_3
8: iconst_4                     int x = 4;
9: istore_0
10: iconst_5                     int y = 5;
11: istore_1
12: ldc2_w     #24   long 6l     long z = 6;
15: lstore_2
16: return                       return;

结果是该方法保留了4个"插槽"。int变量占用1个时隙,long变量占用2个时隙。

所以代码真的说:

slot[0] = 1
slot[1-2] = 2L
slot[3] = 3
slot[0] = 4
slot[1] = 5
slot[2-3] = 6L

这显示了在差异代码块中声明的局部变量如何重用槽。

是(以二进制形式请求答案(

局部变量存储在堆栈内存中。它是在调用方法时分配用于存储局部变量的临时内存。在循环的情况下,局部变量的范围被限制为循环的开始和结束。(例如在while(…({----局部变量的作用域--}的情况下(作用域由{}大括号限制。

当变量在循环中创建时,临时内存在堆栈内存中分配,当变量的作用域结束时,它将可供重用。

注意:局部变量不是垃圾收集的。

最新更新