You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Boolean.valueOf(boolean)从不创建对象?——Effective Java疑问

解惑Boolean.valueOf(boolean)“从不创建对象”的表述

要搞懂这个点,核心是区分对象创建的时机和方法调用的行为:

  • Boolean.TRUE和Boolean.FALSE是JVM启动时就预创建好的全局常量对象,它们的实例在程序运行前就已经存在于内存中了。
  • 看Boolean.valueOf(boolean)的源码:
    public static Boolean valueOf(boolean b) {
        return b ? Boolean.TRUE : Boolean.FALSE;
    }
    
    这个方法根本没有任何new Boolean(...)的逻辑,它只是根据传入的布尔值,把已经存在的两个常量中的一个返回给调用者——在调用这个方法的整个过程里,完全不会新建任何Boolean对象。

对比一下new Boolean(boolean)构造方法:每次调用它都会创建一个全新的Boolean实例,哪怕传入的是同一个布尔值。而valueOf方法全程复用现成的常量,不会产生新对象。

Joshua Bloch说“从不创建对象”,指的是调用该静态工厂方法时不会触发对象创建,那些返回的Boolean对象早就存在了,这个方法只是做了复用。这也是静态工厂方法相比构造方法的核心优势:能控制实例的创建逻辑,避免不必要的对象生成,节省内存。

内容的提问来源于stack exchange,提问作者citizen_code

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 23:40:32