变量自动初始化的默认值?
1.在类的字节码被JVM加载进内存时,系统会对该类中的静态成员变量进行初始化,即设置默认值
static修饰的静态成员变量才会被自动初始化。
实验代码:
public class Test2 {
static byte b;
static int i;
static short s;
static long l;
static boolean bool;
static char ch;
static float f;
static double d;
static String str;
static Integer Int;
static Boolean B;
public static void main(String[] args) {
System.out.println("基本数据类型:");
System.out.println("byte:" + b);
System.out.println("int:" + i);
System.out.println("short:" + s);
System.out.println("long:" + l);
System.out.println("bloolean:" + bool);
System.out.println("char:" + ch);
System.out.println("float:" + f);
System.out.println("double:" + d);
System.out.println("引用数据类型:");
System.out.println(str);
System.out.println(Int);
System.out.println(B);
}
}
结果输出:
说明: 类的静态成员变量自动初始化时,基本数据类型的默认如上图所示。需要注意的时 char 类型,它的值其实也是0,不过它代表的是码表上0对应的字符,也就是空字符。而引用类型默认值都为null.
2.数组初始化
实验代码:
public static void main(String[] args) {
String[] str = new String[5];
Integer[] inte = new Integer[5];
byte [] b = new byte[5];
short [] s = new short[5];
int [] i = new int[5];
long [] l = new long[5];
boolean [] bo = new boolean[5];
char [] ch = new char[5];
float [] f = new float[5];
double [] d = new double[5];
System.out.println(str[0] + " " + inte[0] );
System.out.println(b[0]);
System.out.println(s[0]);
System.out.println(i[0]);
System.out.println(l[0]);
System.out.println(bo[0]);
System.out.println(ch[0]);
System.out.println(f[0]);
System.out.println(d[0]);
}
输出结果:
说明: 上述结果显示数组元素的自动初始化和类的静态变量自动初始化结果一致,通过这个例子说明系统自动初始化时,对每一个类型的变量是固定的,比如
byte short int long 默认值都为0
boolean 为 false
char 为空字符(\u0000)
float double 为0.0
包装类型的变量默认值都为 null(指引用为空)
数组中元素的默认值与数组的类型相符
注意: 未初始化的变量是不能被调用的,否则编译会报错。
总结: 越是基础的东西越重要,所用的复杂都是由很多简单的基础组成的,量变达到质变。所以不能忽略看起来很简单的东西。