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

(真或假)在循环体中声明的局部变量的空间在循环体执行时分配,在循环体结束时释放。

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


莫回无
浏览 154回答 2
2回答

精慕HU

该语句为假,因为未分配和释放局部变量空间。它存在于堆栈中,并在进入方法时保留。要查看堆栈空间是如何使用的,请编写一个小测试程序: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] = 1slot[1-2] = 2Lslot[3] = 3slot[0] = 4slot[1] = 5slot[2-3] = 6L这显示了插槽如何被不同代码块中声明的局部变量重用。

犯罪嫌疑人X

是(作为以二进制形式要求的答案)局部变量存储在堆栈内存中。它是在调用方法时分配的用于存储局部变量的临时内存。在 Loop 的情况下,局部变量的范围仅限于循环开始和结束。(例如,在 while(...) { --- 局部变量的范围 -- } )范围受 {} 大括号限制。当在循环内创建变量时,临时内存被分配到堆栈内存中,当变量的作用域结束时,它可以被重用。注意:局部变量不会被垃圾收集。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java