Java中Boolean.TRUE和true有什么区别? 您所在的位置:网站首页 truly和true和truth Java中Boolean.TRUE和true有什么区别?

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

2024-03-20 14:54| 来源: 网络整理| 查看: 265

PS:我了解"真实"与真实之间的区别。

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

1boolean boolVar = Boolean.TRUE;

似乎是一个有效的声明。

相关讨论 stackoverflow.com/questions/4531767/ 链接没有回答为什么boolean boolVar = Boolean.TRUE;是有效的,有意义的语句。 我说有意义是因为它确实像看起来一样:) 这是因为该链接解决了您在编辑之前提出的问题。 编辑后,我也发表了评论-我只是在澄清那不是我想要的。 我并不是说您错了-我只是在说我不是在寻找您链接的内容。

原因

1boolean boolVar = Boolean.TRUE;

之所以起作用,是因为自动拆箱是Java 5的一项功能,该功能允许包装器对象在需要时自动转换为其等效的原始对象。相反,自动装箱也是可能的:

1Boolean boolVar = true; 相关讨论 太好了-我忘了所有有关自动拆箱的知识!但是,为什么要首先使用Boolean.TRUE? @ user183037:因此您可以在需要时直接使用该对象,而不必进行自动装箱。至于常量本身,您希望系统中所有Boolean实例都是Boolean.TRUE或Boolean.FALSE两个对象之一。只要您不对Boolean使用构造函数,情况就是如此。 更重要的是,您只希望VM中具有true值的单个布尔对象。对于false同样。换句话说,两个为equal()的布尔对象也为==,即同一(相同)对象。 @Ted:是的,那几乎就是我所说的。 " Java不支持运算符重载"的内容太多了。这正是操作员重载所能实现的...

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

至于为什么:

1boolean boolVar = Boolean.TRUE;

有效是因为"自动装箱"和"取消装箱"。

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

123List listOfBoolean = new ArrayList(); boolean someBool = true; listOfBoolean.add(someBool);

它将自动包装或自动装箱

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

并且如果看到您将包装对象(如Boolean.TRUE)视为原始对象,例如:

1boolean boolVar = Boolean.TRUE;

它将转换为原始图元,或将其取消装箱,就像我们这样做一样:

1boolean boolVar = Boolean.TRUE.booleanValue();

从前,您必须手动执行此操作,但是现在,无论好坏,这大部分都由您来解决。

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

1Boolean trueBool = new Boolean(true); 相关讨论 我似乎无法接受2个答案,所以我接受了他早些时候发布的Colins,但是您的详细解释很有道理-谢谢! @ user183037很好,我很乐意为您提供帮助:-)

Boolean.TRUE是包装器对象和singleton。 true是文字常量。以下是我在原始类型上使用包装器的两种情况

我想将它们存储在收藏夹中 我想有一个null的概念。原始布尔值只能表示两个状态。

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

由于多种原因,与类型(例如boolean)相比,强烈首选原始类型(例如boolean)。请参阅此处的讨论。 https://softwareengineering.stackexchange.com/questions/203970/when-to-use-primitive-vs-class-in-java。原始类型使代码更具可读性,防止出现指针错误(例如if(a==b)与if(a.equals(b))),提高了性能并遵循了转换。

在一种情况下,boolean或Integer的性能优于boolean和int。也就是说,如果您要允许null作为值,则处于这种情况。这会导致进行大量的空检查,但可以防止false

您还可以从下面的Wikipedia上获得有关链接的说明。

Java中的所有原始包装器类都是不可变的。 J2SE 5.0引入了将原始类型的自动装箱到其包装对象中,以及将包装对象的自动装箱到其原始值中(包装对象与原始值之间的隐式转换)。

有关http://en.wikipedia.org/wiki/Primitive_wrapper_class的更多信息

Boolean.TRUE是对Boolean类的对象的引用,而true只是原始布尔类型的值。诸如Boolean之类的类通常称为"包装器类",在需要对象而不是原始类型(例如,如果将其存储在数据结构中)时使用。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有