您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

奇怪的'out'变量System.out.println()

奇怪的'out'变量System.out.println()

看看private static void initializeSystemClass()-这个方法被称为启动事情,它调用setOut0()一个native方法。这将Stream它与应该存在的位置联系在一起。

因此,即使该字段 看起来 public static final实际上不是,native代码也会对其进行更改。

OP问 然后JLS为什么需要nullPrintStream方法

这与Java编译器有关- static final如果在编译时将字段分配给常量,它将“内联” 字段null。编译器实际上将用常量替换对字段的每个引用。

这将破坏初始化,因为对象将不再持有对Stream而是的引用null。将流分配给方法的返回可防止内联。

有人可能称其为肮脏的骇客。错误地引用Bi斯麦的话:“ JDK就像香肠一样,最好不要看到它在制造”。

其他 2022/1/1 18:15:16 有440人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶