2 回答
TA贡献1845条经验 获得超8个赞
该语句为假,因为未分配和释放局部变量空间。它存在于堆栈中,并在进入方法时保留。
要查看堆栈空间是如何使用的,请编写一个小测试程序:
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
这显示了插槽如何被不同代码块中声明的局部变量重用。
TA贡献2080条经验 获得超4个赞
是(作为以二进制形式要求的答案)
局部变量存储在堆栈内存中。它是在调用方法时分配的用于存储局部变量的临时内存。在 Loop 的情况下,局部变量的范围仅限于循环开始和结束。(例如,在 while(...) { --- 局部变量的范围 -- } )范围受 {} 大括号限制。
当在循环内创建变量时,临时内存被分配到堆栈内存中,当变量的作用域结束时,它可以被重用。
注意:局部变量不会被垃圾收集。
添加回答
举报