Java中的Boolean.TRUE和true有什么区别?

时间:2011-02-04 03:35:25

标签: java boolean

PS:我理解“真实”与真实之间的区别。

编辑: 我也理解Boolean.TRUE是原语true的包装器,我的问题是 - 为什么原语boolean接受Boolean.TRUE作为值? 例如,

boolean boolVar = Boolean.TRUE;

似乎是一个有效的陈述。

7 个答案:

答案 0 :(得分:29)

原因

boolean boolVar = Boolean.TRUE;

工作是因为 autounboxing ,这是一个Java 5功能,它允许在需要时自动将包装器对象转换为其原始等效项。相反, autoboxing 也是可能的:

Boolean boolVar = true;

答案 1 :(得分:26)

正如之前的答案所述,Boolean.TRUE返回布尔值true包装器对象,因此对于我们需要处理布尔值的对象的上下文(例如,有ArrayList布尔值,我们可以使用Boolean.TRUEBoolean.FALSE

至于原因:

boolean boolVar = Boolean.TRUE;

有效是因为Autoboxing and Unboxing

简而言之,Java编译器在看到您将原语视为对象时,例如

List<Boolean> listOfBoolean = new ArrayList<Boolean>();
boolean someBool = true;
listOfBoolean.add(someBool);

它会自动换行,或者 autobox

List<Boolean> listOfBoolean = new ArrayList<Boolean>();
boolean someBool = true;
listOfBoolean.add(Boolean.valueOf(someBool));

如果它看到你将包装器对象(如Boolean.TRUE)视为基元,则:

boolean boolVar = Boolean.TRUE;

它会将其转换为原语,或 unbox ,就像我们这样做:

boolean boolVar = Boolean.TRUE.booleanValue();

曾几何时,你必须亲手做到这一点,但现在,无论好坏,这主要是为你照顾的。

如果你想知道为什么会有Boolean.TRUE,那是因为没有必要为true漂浮许多布尔对象。由于布尔值只能是两个值中的一个,因此将它们作为常量更简单,而不是每次有人需要装箱时true

Boolean trueBool = new Boolean(true); 

答案 2 :(得分:6)

Boolean.TRUE 是一个包装器对象和单例。 true 是一个文字常量。以下是我在原语上使用包装器的两种情况

  1. 我想将它们存储在集合中
  2. 我想要一个 null 的概念。原始布尔值只能代表两种状态。

答案 3 :(得分:3)

true属于原始boolean类型,而Boolean.TRUE是包含true值的Boolean对象。

答案 4 :(得分:1)

由于多种原因,原始类型(e.i. boolean)比类(e.i。Boolean)更受青睐。见这里的讨论。 https://softwareengineering.stackexchange.com/questions/203970/when-to-use-primitive-vs-class-in-java。原语类型使代码更具可读性,防止指针错误(例如if(a==b) vs if(a.equals(b))),提高性能并跟随转换。

BooleanInteger的效果优于booleanint。也就是说,如果您希望允许null作为值,则会出现这种情况。这导致了许多空检查,但它阻止了false

时滑过

答案 5 :(得分:0)

Boolean.TRUE是对Boolean类对象的引用,而true只是原始布尔类型的值。像Boolean这样的类通常被称为“包装类”,并且在需要对象而不是基本类型时使用(例如,如果将它存储在数据结构中)。

答案 6 :(得分:0)

您也可以在下面的维基百科中找到关于该链接的说明。

Java中的所有原始包装类都是不可变的。 J2SE 5.0将原始类型的自动装箱引入其包装器对象,并将包装器对象自动拆箱为其原始值 - 包装器对象与原始值之间的隐式转换。

更多关于http://en.wikipedia.org/wiki/Primitive_wrapper_class