Ahm*_*ck' 21 java boolean primitive-types
在C++ windows.h FALSE中定义为整数,这对某些特殊逻辑情况有意义,但在Java java.lang.Boolean.FALSE中定义为boolean并赋值为false
public static final Boolean FALSE,我看到有些人使用它.
我的问题:false和之间有性能差异Boolean.FALSE吗?一般为什么人们去Boolean.FALSE?
Jas*_*n C 32
请参阅http://docs.oracle.com/javase/7/docs/api/java/lang/Boolean.html.
Boolean.TRUE而Boolean.FALSE不是boolean,他们是Boolean.他们是两个静态实例Boolean对应于包装对象boolean的值true和false.
Boolean类似于enum.在TRUE和FALSE实例是通过返回的实例Boolean.valueOf().
至于原始与包装的表现; 没有什么区别,你需要关注.在TRUE与FALSE静态情况下提高性能一点,的javadoc推荐使用Boolean.valueOf(),而不是new Boolean(...)因为这个原因.在true与false布尔值是有点"低级别",但如果你是在它们存储Boolean(而不是boolean),反正这是无关紧要的.
你应该使用对你的代码最有意义的东西,并导致最好的可读性(并且绝对不会开始考虑微优化,如原始类型和包装类型).如果您使用的是Boolean,请使用对象值.如果您使用的是boolean,请使用原始值.如果您决定之间BooleanVS boolean,使用什么是更合适的(例如,Boolean可null,这可能是有用的,你也不能使用原始类型的泛型类型参数;而另一方面,一个boolean可以永远是null这可能是同样有用).
另请注意,自动装箱会将基元类型转换为这两个静态Boolean实例之一,例如:
Boolean a = true;
assert(a == Boolean.TRUE);
Run Code Online (Sandbox Code Playgroud)
顺便说一句,因为你提到它:FALSE定义windows.h有两个原因:1)因为windows.h自C开始使用以来,C没有本机bool类型,2)传统的Microsoft实践定义数据类型和具有已知,显式大小和值的值,尤其是 用于跨DLL边界(超出此问题的范围)将数据传递到Windows API函数,以及与具有"true"和"false"的不同表示的其他语言集成.这与Boolean.FALSEJava中的原因完全无关.
false是一个原始的,Boolean.FALSE是一个对象,所以他们不是真正的可比性.
如果您分配false给Boolean变量,如下所示:
Boolean b = false;
Run Code Online (Sandbox Code Playgroud)
Java的自动装箱会将原语转换为一个对象,因此该false值会丢失,Boolean.FALSE无论如何最终都会结束.
在性能方面,使用原始变量会稍微超出使用包装器Boolean对象,但您的选择应该基于可读性和基本设计决策而不是"性能".