java – 为什么类型的空变量声明显示编译错误而不是空声明?

public static void main(String[] args) {
    String s1 = null;
    String s2;
    s1.trim(); //No compile error. But run time error
    s2.trim(); //compile error.
}

在上面的代码中,初始化后没有为s1赋值
编译器知道s1为null.那么为什么不像s2那样显示s1.trim()的编译错误?

最佳答案
因为s2未初始化并且s1初始化为null

对于Que 1:你实际上是对null执行trim()操作,所以它会抛出NPE(NullPointerException).

对于Que 2:
有关详细说明,请参见JLS的§4.12.5

A local variable must be explicitly given a value before it is used,
by either initialization or assignment, in a way that can be verified
by the compiler using the rules for definite assignment.

转载注明原文:java – 为什么类型的空变量声明显示编译错误而不是空声明? - 代码日志