【发布时间】:2011-09-07 18:01:27
【问题描述】:
Java 中boolean(原始)和Boolean(原始包装)的默认值是什么?
【问题讨论】:
标签: java boolean default-value
Java 中boolean(原始)和Boolean(原始包装)的默认值是什么?
【问题讨论】:
标签: java boolean default-value
Boolean 没有默认值。 Boolean 必须使用 boolean 或 String 构造。如果对象未初始化,它将指向null。
原语boolean的默认值为false。
http://download.oracle.com/javase/6/docs/api/java/lang/Boolean.html
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
【讨论】:
null。 null 是默认设置,所以当您说没有时,我不确定您指的是什么。 (您的意思可能是“Boolean 既不是true 也不是false 默认情况下”?)
未初始化的Boolean 成员(实际上是对Boolean 类型对象的引用)将具有null 的默认值。
未初始化的boolean(原始)成员将具有默认值false。
【讨论】:
任何Object(如Boolean)的默认值为null。
boolean 的默认值为 false。
注意:每个原语都有一个包装类。每个包装器都使用一个默认值为null 的引用。基元有不同的默认值:
boolean -> false
byte, char, short, int, long -> 0
float, double -> 0.0
注意 (2): void 有一个包装器 Void,它也有一个默认值 null,这是唯一可能的值(不使用 hack)。
【讨论】:
Boolean 是Object,这会使第一行的含义显而易见。这听起来很基本,但对于提出这样一个基本问题的人来说,它可能会有所帮助。
Boolean(对象)的默认值为null。
default value 的 boolean(原始)是 false。
【讨论】:
如果您需要询问,那么您需要明确初始化您的字段/变量,因为如果您必须查找它,那么很可能其他人也需要这样做。
原语boolean 的值为假,如here 所示。
正如其他人所提到的,Boolean 的值默认为 null。
【讨论】:
布尔值是一个对象。因此,如果它是一个实例变量,它将为空。如果它是在方法中声明的,则必须对其进行初始化,否则会出现编译器错误。
如果您声明为原始类型,即布尔值。如果它是实例变量(或类变量),则该值默认为 false。如果它是在方法中声明的,您仍然必须将其初始化为 true 或 false,否则会出现编译器错误。
【讨论】:
布尔值
可以是true 或false。
默认值为false。
布尔值
可以是代表true 或false 的Boolean 对象,或 可以是null。
默认值为null。
【讨论】:
class BooleanTester
{
boolean primitive;
Boolean object;
public static void main(String[] args) {
BooleanTester booleanTester = new BooleanTester();
System.out.println("primitive: " + booleanTester.getPrimitive());
System.out.println("object: " + booleanTester.getObject());
}
public boolean getPrimitive() {
return primitive;
}
public Boolean getObject() {
return object;
}
}
输出:
primitive: false
object: null
这似乎很明显,但我遇到过这样一种情况,Jackson 在将对象序列化为 JSON 时,在调用 getter 后抛出了一个 NPE,就像这个一样,它返回一个未分配的原始布尔值。这让我相信杰克逊正在接收一个空值并试图在它上面调用一个方法,因此是 NPE。我错了。
这个故事的寓意是,当 Java 为原语分配内存时,即使未初始化,该内存也有一个值,Java 等同于布尔值的 false。相比之下,当为布尔值等未初始化的复杂对象分配内存时,它只为对该对象的引用分配空间,而不是对象本身——内存中没有可引用的对象——因此解析该引用会导致 null。
我认为严格来说,“默认为 false”有点离题。我认为Java在明确设置之前不会分配内存并为其分配一个false值;我认为 Java 分配内存,内存恰好具有的任何值都与“false”的值相同。但实际上,它们是一回事。
【讨论】: