我正在研究java,他们经常使用变量的范围和生命。局部变量的生命和范围有什么区别?
答案 0 :(得分:2)
没有“变量的生命”这样的东西。变量有scope
,超出范围后就无法访问了。如果该变量引用了一个对象,则该对象有资格进行垃圾回收。你可能会谈论一个对象的生命周期,但不是一个变量。
在一些评论中提到了堆栈框架,并且在方法的持续时间内,局部变量(即堆栈上的变量占用的空间)如何在堆栈帧中“活着” 。然而,这是不同的和更低级别的讨论的一部分,与变量范围无关。没有人会讨论堆栈框架并谈论变量“活着”。
答案 1 :(得分:2)
变量的范围是变量可见且可以使用的代码的一部分。
通常,我们并没有真正谈论变量的生命周期,而是谈论对象的生命周期。非null引用变量引用一个对象,并且当一个对象不再被变量引用时,它可以被垃圾收集器销毁。
Java语言规范还讨论了变量存在多长时间。这对于6种不同的变量中的每一种都是不同的。例如,一旦定义它的代码块完成执行,局部变量就不再存在。另一方面,一旦作为其一部分的对象(与其引用的对象相对)被垃圾收集器破坏,实例变量(作为对象的一部分的变量)就不再存在。有关详细信息,请参阅Section 4.12.3 of the JLS。
答案 2 :(得分:1)
变量的生命周期是变量存在于内存中的持续时间。
变量的范围是可以访问变量的位置。