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.TRUEBoolean.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是一个文字常量。 以下是我在原语上使用包装器的两种情况

  1. 我想将它们存储在集合中
  2. 我想要一个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)) ,提高性能并跟随转换。

有一种情况, BooleanIntegerbooleanint效果更好。 也就是说,如果您想要允许null作为值,则会出现这种情况。 这导致了许多空检查,但它可以防止false在滑过时