1. 问题
- Java 中,变量一定要初始化吗?
2. 解答
- 不一定。
a. 变量作为局部变量
- 变量作为局部变量时,如果不对其赋值,又要使用它,那就必须得初始化,否则报错。
public class Test {
public static void main(String[] args) {
int[] a;
int i;
System.out.println(a);
System.out.println(i);
}
}
b. 变量作为类的属性
变量作为类的属性(值域)没有初始化时,JVM 会自动把它初始化为该类型变量的默认初始值。int 默认初始值为 0,float 默认初始值为 0.0f,long 默认初始值为 0,double 默认初始值为 0.0,boolean 默认初始值为 false,char 默认初始值为 0(ASCII 码),所有对象(包括数组)默认初始值为 null。
对于不同的类属性,static 属性与 instance 属性,初始化的时机是不同的:
instance 属性在创建实例时初始化;
static 属性在类加载,也就是第一次用到这个类的时候初始化,对于之后的实例的创建,不再次进行初始化。
public class Test {
int[] a;
int i;
static int[] sa;
static int si;
public static void main(String[] args) {
System.out.println(new Test().a);
System.out.println(new Test().i);
System.out.println(sa);
System.out.println(si);
}
}
c. 变量作为方法参数
- 本质上跟第一种是一样的,都是方法中的局部变量。虽然不需要初始化,但是传入的值必须是被初始化过的,否则报错。
public class Test {
void f(int i, int[] a){
System.out.println();
System.out.println(a);
System.out.println(i);
}
public static void main(String[] args) {
int[] a;
int i;
new Test().f(i,a);
}
}