代码:
public class A {
public static void main(String[] args) {
int i;
System.out.println(i);
}
}
当我运行它时,它不是打印默认值int,即0,而是发出The local variable i may not have been initialized
的错误。
为什么初始化是强制性的,那么为什么原始数据类型具有默认值?他们可能像C ++一样拥有垃圾值。
答案 0 :(得分:6)
默认值不用于局部变量,仅用于for a fields in a class:
public class A {
int i;
public static void main(String[] args) {
System.out.println(i);
}
}
声明字段时,并不总是需要指定值。声明但未初始化的字段将由编译器设置为合理的默认值。一般来说,此默认值将为零或null,具体取决于数据类型。但是,依赖于这样的默认值通常被认为是糟糕的编程风格。
下表总结了上述数据类型的默认值。
数据类型默认值(对于字段)
byte 0 short 0 int 0 long 0L float 0.0f double 0.0d char '\u0000' String (or any object) null boolean false
局部变量略有不同;编译器永远不会为未初始化的局部变量分配默认值。如果无法初始化声明它的局部变量,请确保在尝试使用它之前为其赋值。访问未初始化的局部变量将导致编译时错误。