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)
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)
Boolean.TRUE是一个包装器对象和单例.true是一个文字常量.下面是我在原语上使用包装器的两种情况