1) 局部变量初始化(局部变量:函数、语句中的变量,只在所属区域内有效)
局部变量声明后,Java虚拟机不会自动给它初始化为默认值。
因此对于局部变量,必须经过显示的初始化,才能使用它。
如果使用一个没有被初始化的局部变量,编译器会报错。
局部变量存储于虚拟机栈的局部变量表中
例:
2) 对于类的成员变量,不管程序有没有显示的初始化,Java虚拟机都会先自动给它初始化为默认值。
对于数组,数组引用类型的变量的默认值为null。当数组变量实例化后,如果没有显式地为每个元素赋值,Java会把该数组的所有元素初始化为相应类型的默认值。
这是因为所有对象实例以及数组是在堆上分配内存的。在内存分配完成后,虚拟机需要将分配到的内存空间都初始化为零值(不包括对象头)。这一操作保证了对象的实例字段在java代码中可以不赋初值就直接使用,程序能访问这些字段的数据类型所对应的零值。
例1:
例2:
运行结果:
例3:
运行结果: