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

时间:2011-09-15 16:16:01

标签: java boolean

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

  

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

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

5 个答案:

答案 0 :(得分:19)

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

This ticket解释了不弃用构造函数的原因:

  

由于API可能具有中断,目前是API   必须被“主动危险”才能被弃用,比如Thread.stop。   虽然使用这个构造函数肯定是不明智的,但事实并非如此   上升(或下沉)到将被弃用的危险标准   JDK。在未来,我们可能会添加一个“诋毁”设施来标记   API元素不是很糟糕,应该弃用它们,   但在大多数情况下不应该使用。这个构造函数会很好   诋毁候选人。

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

答案 1 :(得分:7)

通常,您需要直接使用valueOf(boolean)甚至Boolean.TRUE / Boolean.FALSE常量。

但请考虑一种情况,您希望使用私有Boolean变量作为监视器来同步线程。在那里,您需要确保使用自己的实例并完全控制它。

答案 2 :(得分:5)

另一个,不一定是好理由可能只是让它与其他原生包装器保持一致。

答案 3 :(得分:0)

它没有被弃用的原因是Java保持向版本1.0的向后兼容性

我想不出使用构造函数的好理由。

答案 4 :(得分:0)

从Java 9开始,Boolean(boolean)构造函数>> <<已弃用;参见javadoc

对于那些关心历史的人来说,长期存在的bug要求弃用构造函数。它在JEP 277中正式提出,并有其他一些弃用的规定。