当两个名为"out"的对象时,为什么我没有收到错误?

vik*_*iii 1 java

我写了一小段代码:

 System out = null;
 out.out.println("Hello");
Run Code Online (Sandbox Code Playgroud)

这工作正常,并在控制台上打印"Hello".

现在在我的程序或我的范围中,有两个具有名称的对象out.一个是对象,System另一个是对象PrintStream.

为什么我没有收到编译器错误/运行时错误Duplicate local variable out.

我在这里错过了什么?

Mat*_*Mat 5

没有,只是命名一个对象out,该System型局部变量.另一个是命名的out.out,它不是直接"在你的范围内".

没有理由导致编译时错误.

(顺便说一下,通过null引用调用静态方法/引用静态字段并不是一个很好的实践,它非常令人困惑.)