无论发生什么默认值?

KW1*_*123 1 java default-value

码:

public class A {

    public static void main(String[] args) {
        int i;
        System.out.println(i);
    }

}
Run Code Online (Sandbox Code Playgroud)

当我运行它,而不是打印默认值int,即0时,它会发出错误消息The local variable i may not have been initialized.

为什么如果初始化是强制性的,那么为什么原始数据类型具有默认值呢?他们可能像C++一样拥有垃圾值.

VMA*_*Atm 6

默认值不用于局部变量,仅用于类中的字段:

public class A {
    int i;

    public static void main(String[] args) {
        System.out.println(i);
    }

}
Run Code Online (Sandbox Code Playgroud)

默认值

声明字段时并不总是需要分配值.声明但未初始化的字段将由编译器设置为合理的默认值.一般来说,此默认值将为零或null,具体取决于数据类型.然而,依赖于这样的默认值通常被认为是糟糕的编程风格.

下表总结了上述数据类型的默认值.

数据类型默认值(对于字段)

 byte                     0  
 short                    0  
 int                      0  
 long                     0L  
 float                    0.0f  
 double                   0.0d  
 char                     '\u0000'  
 String (or any object)   null  
 boolean                  false  
Run Code Online (Sandbox Code Playgroud)

局部变量略有不同; 编译器永远不会为未初始化的局部变量分配默认值.如果无法初始化声明它的局部变量,请确保在尝试使用它之前为其赋值.访问未初始化的局部变量将导致编译时错误.