为什么实例变量在Java中具有默认值?
问题内容:
为什么在类中声明的变量具有默认值,但是在方法内部声明的变量(称为“局部变量”)在Java中没有默认值?
例如
class abc
{
int a;
public static void main(String ss[])
{
int b;
abc aa=new abc();
System.out.println(aa.a);
System.out.println(b);
}
}
在上面的示例中,变量的a
默认值为0,但是变量b
给出了可能尚未初始化的错误。
问题答案:
所有成员变量都必须加载到堆中,因此在创建类的实例时必须使用默认值进行初始化。对于局部变量,它们不会被加载到堆中,直到在Java7之前被使用,它们才会存储在堆栈中,因此我们需要显式初始化它们。现在,“ Java Hotspot
Server编译器”执行“转义分析”,并决定在堆栈而不是堆上分配一些变量。