Java不打印默认的单位化值

Edg*_*ian 3 java

我理解只声明但未初始化的Java对象默认为该null值,但为什么以下编译并打印出null?

String a;
System.out.println(a);
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

JLS第16节:

当对其值进行任何访问时,每个局部变量(第14.4节)和每个空白最终字段(第4.12.4节,第8.3.1.2节)必须具有明确赋值.

您的代码用于非最终字段(实例或静态变量),因为它们按照4.12.5节初始化,但由于这个原因会导致局部变量的编译时错误.

如果a是原始变量,情况也是如此.这是一个简短但完整的程序,显示了所有这些:

class Test {

    static int x;
    static String y;

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

        int lx;
        String ly;
        System.out.println(lx); // Compile-time error
        System.out.println(ly); // Compile-time error
    }
}
Run Code Online (Sandbox Code Playgroud)

删除非编译行后输出前两行:

0
null
Run Code Online (Sandbox Code Playgroud)