以下变量声明之间是否存在差异?
Class A {
private int a;
A(){
a= 2;
}
}
VS
Class A {
private int a = 2;
A(){
}
}
垃圾收集会以不同的方式工作吗?
答案 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
声明为该类的成员变量。每当实例化类时,都会在堆上为该整数留出空间。但是,垃圾收集器只关心是否存在对已实例化的包含对象的任何引用。无论你对成员变量做什么,如果有对象的引用,对象将留在内存中,之后它就有资格进行垃圾回收。
然而,也许您认为应该有区别?那是为什么?