【发布时间】:2016-07-23 23:49:30
【问题描述】:
考虑一个简单的while循环,如下所示
public static void main(String[] args) {
int i = 6;
int k = 10;
while(i<k) {
int v = 5;
i++;
}
}
变量v的空间是否只在while循环执行时分配,循环结束时释放?
或者不管while循环的终止或执行,它是否都留在内存中?
如果它不是原始数据类型(任何类型的对象)有什么不同吗?
【问题讨论】:
-
在这种情况下不会有任何内存分配,因为编译器很可能不会在编译后的字节码中包含未使用的变量。
-
所以变量v根本不会分配任何内存?即使正在执行while循环?那么如果 int v 被用于某个函数,它将如何获得它所持有的值呢?
-
v 如何在没有内存分配的情况下存储一个值?变量存在于它们的作用域中(它们被声明的地方)并且在它们的作用域结束时可用于垃圾回收。
-
@Areca 我的第一句话是正确的吗?是真的吗?
-
分配是什么意思?对于像您的示例这样的原始数据类型,变量将在堆栈上分配,然后在堆栈上以很少的开销释放(请参阅stackoverflow.com/questions/3646632/…)。如果它是使用
new创建的对象,那么就会有动态分配。
标签: java