Java 中的缺省值和初始化

根据我的引用,基元类型具有默认值,而对象为 null。我测试了一段代码。

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

该行将是指向变量的错误,该变量表示,而在给定的引用中,将具有默认值。但是,使用下面的给定代码,它实际上将打印 。System.out.println(a);avariable a might not have been initializedinteger00

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

第一个代码可能出什么问题?类变量的行为是否与局部变量不同?


答案 1

在第一个代码示例中,是一个方法局部变量。方法局部变量在使用之前需要初始化。amain

在第二个代码示例中,是类成员变量,因此它将初始化为默认值。a


答案 2

请更仔细地阅读您的参考资料

默认值

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

下图总结了上述数据类型的默认值。

. . .

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