Java中的Boolean.TRUE和true有什么区别?
PS:我理解“真实”与真实之间的区别。
编辑:我也明白Boolean.TRUE是原始true的包装器,我的问题是 – 为什么原语boolean接受Boolean.TRUE作为值? 例如,
boolean boolVar = Boolean.TRUE;
似乎是一个有效的声明。
原因
boolean boolVar = Boolean.TRUE;
工作是因为autounboxing ,一个Java 5function,允许包装器对象在需要时自动转换为其原始等效项。 相反, 自动装箱也是可能的:
Boolean boolVar = true;
正如之前的答案所述, Boolean.TRUE
返回布尔值为true
的包装器对象,因此对于我们需要处理布尔类似对象的上下文(例如,具有布尔值的ArrayList
),我们可以使用Boolean.TRUE
或Boolean.FALSE
至于原因:
boolean boolVar = Boolean.TRUE;
有效是因为Autoboxing和Unboxing 。
简而言之,Java编译器,当它看到你像对象一样处理原语时,如
List listOfBoolean = new ArrayList (); boolean someBool = true; listOfBoolean.add(someBool);
它会自动换行,或自动装箱
List listOfBoolean = new ArrayList (); boolean someBool = true; listOfBoolean.add(Boolean.valueOf(someBool));
如果它看到你将包装器对象(如Boolean.TRUE
)视为基元,则:
boolean boolVar = Boolean.TRUE;
它会将其转换为原始的,或者将其拆箱 ,就像我们这样做:
boolean boolVar = Boolean.TRUE.booleanValue();
曾几何时,你必须亲手做到这一点,但现在,无论好坏,这主要是为你照顾的。
如果你想知道为什么会有Boolean.TRUE
,那是因为没有必要在很多布尔对象周围浮动为true
。 由于布尔值只能是两个值中的一个,因此将它们作为常量更简单,而不是每次有人需要装箱时为true
:
Boolean trueBool = new Boolean(true);
Boolean.TRUE是一个包装器对象和单例。 true是一个文字常量。 以下是我在原语上使用包装器的两种情况
- 我想将它们存储在集合中
- 我想要一个null的概念。 原始布尔值只能代表两种状态。
true
是原始boolean
类型,而Boolean.TRUE
是包装true
值的Boolean
对象。
Boolean.TRUE是对Boolean类对象的引用,而true只是原始布尔类型的值。 像Boolean这样的类通常称为“包装类”,并且在需要对象而不是基本类型时使用(例如,如果将它存储在数据结构中)。
您还可以从以下维基百科的链接获得解释。
Java中的所有原始包装类都是不可变的。 J2SE 5.0引入了原始类型的自动装箱到它们的包装器对象中,并将包装器对象自动拆箱到它们的原始值 – 包装器对象和原始值之间的隐式转换。
有关http://en.wikipedia.org/wiki/Primitive_wrapper_class的更多信息
由于多种原因,原始类型(ei boolean
)比类(ei Boolean
)更受欢迎。 见这里的讨论。 https://softwareengineering.stackexchange.com/questions/203970/when-to-use-primitive-vs-class-in-java 。 基元类型使代码更具可读性,防止指针错误,例如if(a==b)
vs if(a.equals(b))
,提高性能并跟随转换。
有一种情况, Boolean
或Integer
比boolean
和int
效果更好。 也就是说,如果您想要允许null
作为值,则会出现这种情况。 这导致了许多空检查,但它可以防止false
在滑过时