Java中的变量垃圾收集

时间:2012-05-31 23:53:36

标签: java garbage-collection

以下变量声明之间是否存在差异?

Class A {
  private int a;
  A(){
    a= 2;
  }
}

VS

Class A {
  private int a  = 2;
  A(){
  } 
}

垃圾收集会以不同的方式工作吗?

3 个答案:

答案 0 :(得分:1)

没有区别,因为java编译器在内部构造函数内初始化“private int a = 2”。您可以使用java反编译器来确认我的上述语句。因此,两个GC都可以正常工作。

答案 1 :(得分:0)

两个初始化的行为没有区别。在第一个示例中,a = 2将在调用构造函数代码之前发生。如果你做了a final:

private final int a; //first example

private final int a = 2; //second example

然后你会看到你在构造函数中可以做的事情之间的区别:

 A(){ //The blank final field a may not have been initialized for first example
 }

 A(){
   a = 2; //The final field Apple.a cannot be assigned for second example
 }

答案 2 :(得分:0)

在这两种情况下,您都将int a声明为该类的成员变量。每当实例化类时,都会在堆上为该整数留出空间。但是,垃圾收集器只关心是否存在对已实例化的包含对象的任何引用。无论你对成员变量做什么,如果有对象的引用,对象将留在内存中,之后它就有资格进行垃圾回收。

然而,也许您认为应该有区别?那是为什么?