为什么Boolean对象在Java中有公共构造函数?

mus*_*pax 25 java boolean

new Boolean(boolean value)Java中构造函数的文档说明:

注意:使用此构造函数很少是合适的.除非需要新实例,否则静态工厂valueOf(boolean)通常是更好的选择.它可能会产生明显更好的空间和时间性能.

如果是这样,为什么这个构造函数是公开的而不是弃用的?是否有充分的理由使用此构造函数而不是Boolean.valueOf()

NPE*_*NPE 19

valueOf() 只有在Java 1.4中添加,因此看起来构造函数是为了向后兼容而存在的.

此票证解释了不弃用构造函数的原因:

由于API可能具有中断,目前API必须"主动危险"才能被弃用,例如Thread.stop.虽然使用这个构造函数肯定是不明智的,但它不会上升(或下沉)到JDK中不推荐使用的危险性标准.在将来,我们可能会添加一个"拒绝"工具来标记API元素,这些元素不是很糟糕,应该弃用,但在大多数情况下不应该使用.这个构造函数是诋毁的好人选.

我想不出一个现实的场景,即使用Boolean构造函数是做有用事情的最好方法.


Cos*_*atu 7

通常,您将希望直接使用valueOf(boolean)甚至Boolean.TRUE/ Boolean.FALSE常量.

但想想你想要使用私有Boolean变量作为监视器来同步线程的场景.在那里,您需要确保使用自己的实例并完全控制它.

  • 这是一个非常不重​​要的原因; 实际上有数以千计的其他物品可以用作监视器.我没有看到在该集合中保持"布尔"作为高优先级. (7认同)
  • 不重要但是一个好的用例,valueof方法可能返回重复的对象,有时你不想要那样 (2认同)
  • @Hemal,"new"创建一个新实例.由于布尔值是不可变的,它通常是浪费一个对象 - valueOf()返回两个对象Boolean.TRUE或Boolean.FALSE之一.使用Boolean.TRUE/FALSE比valueOf()更快,因为在编译时选择true或false.当然,如果你在运行时之前不知道它是什么,那么它与valueOf()没有任何优势. (2认同)

Tim*_*Ohr 5

另一个,不一定是好理由可能只是简单地保持与其他本机包装器一致.