为什么java/lang/System中的nullPrintStream()函数将currentTimeMillis()



加载System类时,<clinit>方法使用nullPrintStream()方法将inouterr PrintStream变量实例化为null

private static PrintStream nullPrintStream() throws NullPointerException {
    if (currentTimeMillis() > 0) {
        return null;
    }
    throw new NullPointerException();
}

我理解为什么会出现这种情况,以及为什么在加载过程中不能实例化变量,但我对该方法的内容感到困惑。

为什么要比较currentTimeMillis()0?在什么情况下,该比较会返回false

nullPrintStream()方法的Javadoc提供了一条线索:

但是,不能允许编译器内联访问它们,因为它们后来被设置为更合理的值通过initializeSystemClass()。

我想,这是一个编码破解,目的是防止编译器内联一个简单的"return null"实现。

currentTimeMillis()永远不会小于0。但是编译器不够聪明,不知道这一点,因此保留了条件语句。