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

use*_*037 30 java boolean

PS:我理解"真实"与真实之间的区别.

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

boolean boolVar = Boolean.TRUE;
Run Code Online (Sandbox Code Playgroud)

似乎是一个有效的陈述.

Col*_*inD 32

原因

boolean boolVar = Boolean.TRUE;
Run Code Online (Sandbox Code Playgroud)

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

Boolean boolVar = true;
Run Code Online (Sandbox Code Playgroud)

  • 更重要的是,您只需要VM中的一个布尔对象具有"true"值.同样对于'假'.换句话说,两个"等于()"的布尔对象也是"==" - 即相同(相同)的对象. (2认同)

Zac*_*h L 27

如前面的答案所述,Boolean.TRUE返回boolean值的包装器对象true,因此对于我们需要处理boolean类似对象的上下文(例如,有一个ArrayListbooleans),我们可以使用Boolean.TRUE或者Boolean.FALSE

至于原因:

boolean boolVar = Boolean.TRUE;
Run Code Online (Sandbox Code Playgroud)

有效是因为Autoboxing和Unboxing.

简而言之,Java编译器,当它看到你像对象一样处理原语时,如

List<Boolean> listOfBoolean = new ArrayList<Boolean>();
boolean someBool = true;
listOfBoolean.add(someBool);
Run Code Online (Sandbox Code Playgroud)

它会自动将它包装,或autobox

List<Boolean> listOfBoolean = new ArrayList<Boolean>();
boolean someBool = true;
listOfBoolean.add(Boolean.valueOf(someBool));
Run Code Online (Sandbox Code Playgroud)

如果它看到你处理一个包装器对象,就像Boolean.TRUE一个原语,如:

boolean boolVar = Boolean.TRUE;
Run Code Online (Sandbox Code Playgroud)

它会将它转换为原始的,或者其解包,就像我们这样做:

boolean boolVar = Boolean.TRUE.booleanValue();
Run Code Online (Sandbox Code Playgroud)

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

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

Boolean trueBool = new Boolean(true); 
Run Code Online (Sandbox Code Playgroud)


Ara*_*ram 6

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

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