我查看了 java.lang.System 源代码,发现以下几行:
public final static InputStream in = null;
public final static PrintStream out = null;
public final static PrintStream err = null;
我知道不能重新分配最终引用,因此诸如“System.out.println”之类的方法调用应该会导致 NullPointerException。另一方面,我看到 System.setOut 是用 C 语言实现的(好吧,setOut0),我想知道这里发生了什么神奇的事情,以及如何将值重新分配给最终引用。