java中的字符串初始化是否必要......?

Shi*_*hai 4 java

class TestMe{   
    public static void main (String args[]){
        String s3;  
        System.out.print(s3);
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么编译器给出错误,引用对象的默认值为null,为什么它不是输出... ??

error: variable s3 might not have been initialized

NPE*_*NPE 5

这是一个错误,因为JLS在§14.4.2中这样说.执行局部变量声明:

如果声明符没有初始化表达式,那么每次对该变量的引用都必须先执行对该变量的赋值,否则将在第16节的规则中发生编译时错误.