局部变量的生命和范围之间的差异?

时间:2018-01-24 06:56:56

标签: java

我正在研究java,他们经常使用变量的范围和生命。局部变量的生命和范围有什么区别?

3 个答案:

答案 0 :(得分:2)

没有“变量的生命”这样的东西。变量有scope,超出范围后就无法访问了。如果该变量引用了一个对象,则该对象有资格进行垃圾回收。你可能会谈论一个对象的生命周期,但不是一个变量。

在一些评论中提到了堆栈框架,并且在方法的持续时间内,局部变量(即堆栈上的变量占用的空间)如何在堆栈帧中“活着” 。然而,这是不同的和更低级别的讨论的一部分,与变量范围无关。没有人会讨论堆栈框架并谈论变量“活着”。

答案 1 :(得分:2)

变量的范围是变量可见且可以使用的代码的一部分。

通常,我们并没有真正谈论变量的生命周期,而是谈论对象的生命周期。非null引用变量引用一个对象,并且当一个对象不再被变量引用时,它可以被垃圾收集器销毁。

Java语言规范还讨论了变量存在多长时间。这对于6种不同的变量中的每一种都是不同的。例如,一旦定义它的代码块完成执行,局部变量就不再存在。另一方面,一旦作为其一部分的对象(与其引用的对象相对)被垃圾收集器破坏,实例变量(作为对象的一部分的变量)就不再存在。有关详细信息,请参阅Section 4.12.3 of the JLS

答案 2 :(得分:1)

变量的生命周期是变量存在于内存中的持续时间。

变量的范围是可以访问变量的位置。