Java中boolean和Boolean有什么区别?

67

我想了解Java中Booleanboolean类型的区别,特别是它们与GWT的关系。 我知道方法不支持,但如果有更多信息,我想了解。

8个回答

133

这很简单,对于GWT和Java都是相同的:

  • boolean可以是yes或no
  • Boolean可以是yes、no或NULL。

所以,除非你需要NULL(例如从数据库加载字段,并且你希望NULL与false不同),否则请使用boolean。


1
我希望可以将布尔值传递给一个方法,并且该布尔值可以被设置,调用者也能知道...反之亦然。 - Brian Reinhold

39

我不确定GWT因素是否有影响,但总的来说:

boolean 是 Java 的基础数据类型,而 Boolean 是一个封装了 boolean 类型的对象/引用类型。

这样在原始数据类型和对象之间进行转换被称为装箱/拆箱。

以下是更多信息:

http://javaeye.wordpress.com/2008/06/17/boxing-and-unboxing-conversion/

你可能会问,为什么要装箱?

http://java.sun.com/j2se/1.5.0/docs/guide/language/autoboxing.html

http://www.javapractices.com/topic/TopicAction.do?Id=197


+1 对于提到装箱/拆箱的内容 :-). 如果我理解正确,不能将原始类型(如 intboolean)放入集合中是包装对象(例如 BooleanInteger 等)存在的主要(如果不是唯一的)原因... - Julien

12
在Java中,boolean是一个字面值truefalse,而Boolean是一个boolean的对象包装器。
除了在需要对象引用的情况下(例如在List中),很少有理由使用Boolean而不是booleanBoolean还包含静态方法parseBoolean(String s),你可能已经知道。

7

布尔类型可以为 null,因此可以用于延迟加载。

if(hasRoots == null){
   calculateRoots();
}

5

Java有原始类型(int、boolean、float等),如果你想将它们用作对象的实例,则需要将它们包装在相关的类类型中。例如,布尔值被Booleans包装,整数被Integer包装等。

这也有它的好处。布尔没有辅助方法(因为它不是一个类),但是Boolean有。因此,如果您想将字符串转换为布尔值,可以尝试使用Boolean.valueOf("true")。

希望这能帮到您。


1

boolean是一个基本类型,而Boolean是一个包装类。对于(int,Integer),(long,Long)等也适用相同的规则。

包装类将相应的基本数据类型“包装”成该类的对象。

它们与集合一起使用,因为基本类型不允许与集合一起使用。此外,使用包装类可以让您访问可以在该对象上调用的许多方法。例如,Character包装类具有以下方法:

isDigit() - 用于确定字符是否为数字。 isLower() - 用于确定字符是否为小写字母。 isLetter() - 用于确定字符是否为字母。

如果我们使用基本类型而不是包装类,我们无法使用上述方法。


1

就 GWT 而言,它们在 GWT 中与 Java 中的相同。
boolean 是一个原始类型,而 Boolean 是一个对象包装器。


1

根据GWT JRE模拟文档(http://code.google.com/webtoolkit/doc/1.6/RefJreEmulation.html),以下方法支持Boolean类型:Boolean(boolean)、Boolean(String)、parseBoolean(String)、toString(boolean)、valueOf(boolean)、valueOf(String)、booleanValue()、compareTo(Boolean)、equals(Object)、hashCode()、toString()。

至于boolean和Boolean对象类型之间的区别。布尔对象可以处于3种状态,因此并不完全相同。但如果在GWT中这会对性能产生影响,我不知道,我猜测这并不是很重要,因为GWT编译器将优化代码,并且大多数操作只需要映射到本机JavaScript布尔操作。

但通常情况下,您必须进行测量以确定(并考虑到这可能基于您测量的浏览器/版本而异)。

Boolean对象类型通常不经常使用,因为布尔本机类型更自然(您不必一直检查null)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接