false 和 Boolean.FALSE 之间有什么区别?
在C++被定义为整数,这对于一些特殊的逻辑情况是有意义的,但在Java中被定义为布尔值并分配给false
,我看到有些人使用它。windows.h FALSE
java.lang.Boolean.FALSE
public static final Boolean FALSE
我的问题:和 之间是否存在性能差异?一般来说,人们为什么去和?false
Boolean.FALSE
Boolean.FALSE
在C++被定义为整数,这对于一些特殊的逻辑情况是有意义的,但在Java中被定义为布尔值并分配给false
,我看到有些人使用它。windows.h FALSE
java.lang.Boolean.FALSE
public static final Boolean FALSE
我的问题:和 之间是否存在性能差异?一般来说,人们为什么去和?false
Boolean.FALSE
Boolean.FALSE
请参阅 http://docs.oracle.com/javase/7/docs/api/java/lang/Boolean.html。
Boolean.TRUE
并且不是,它们是 。它们是两个包装器对象的静态实例,对应于值 和 。Boolean.FALSE
boolean
Boolean
Boolean
boolean
true
false
Boolean
类似于 .和 实例是 Boolean.valueOf() 返回的
实例。enum
TRUE
FALSE
至于原始与包装器的性能;您不需要担心的区别。和静态实例对性能有一定帮助,javadocs建议使用而不是出于这个原因。和布尔值有点“低级”,但如果你将它们存储在(而不是)中,那无论如何都是无关紧要的。TRUE
FALSE
Boolean.valueOf()
new Boolean(...)
true
false
Boolean
boolean
你应该使用对你的代码最有意义并导致最佳可读性的任何一个(绝对不要开始考虑微优化,如原始与包装类型)。如果使用 ,请使用对象值。如果使用 ,请使用基元值。如果你在 vs 之间做出决定,请使用任何更合适的方法(例如,a can be ,这可能很有用,而且你不能对泛型类型参数使用基元类型;另一方面,a 永远不可能是同样有用的)。Boolean
boolean
Boolean
boolean
Boolean
null
boolean
null
另请注意,自动装箱会将基元类型转换为这两个静态实例之一,例如:Boolean
Boolean a = true;
assert(a == Boolean.TRUE);
顺便说一句,既然你提到了它:定义有两个原因:1)因为自C-only时代以来一直在使用,而C没有本机类型,2)传统的Microsoft做法是定义具有已知,显式大小和值的数据类型和值,特别是用于跨DLL边界将数据传递到Windows API函数(超出本问题的范围)以及与具有不同语言的其他语言集成。“真”和“假”的表示。它与Java中的原因完全无关。FALSE
windows.h
windows.h
bool
Boolean.FALSE
false
是一个基元,是一个对象,所以它们并不具有可比性。Boolean.FALSE
如果赋值给变量,如下所示:false
Boolean
Boolean b = false;
Java的自动装箱是为了将基元转换为对象,因此值丢失,无论如何你最终都会得到。false
Boolean.FALSE
在性能方面,使用基元变量的性能会略微优于使用包装器对象,但您的选择应基于可读性和基本设计决策,而不是基于“性能”。Boolean