繁体   English   中英

Java中'boolean'和'Boolean'的默认值

[英]Default value of 'boolean' and 'Boolean' in Java

Java 中的boolean (原始)和Boolean (原始包装)的默认值是多少?

Boolean (对象)的默认值为null
boolean (原始)的默认值为false

任何Object的默认值,例如Boolean ,是null

boolean的默认值为 false。

注意:每个原语都有一个包装器 class。 每个包装器都使用一个默认值null的引用。 基元有不同的默认值:

boolean -> false

byte, char, short, int, long -> 0

float, double -> 0.0

注意(2): void有一个包装器Void ,它也有一个默认值null并且它是唯一可能的值(不使用黑客)。

boolean
可以是truefalse
默认值为false

(来源: Java 原始变量

Boolean
可以是代表truefalseBoolean object ,可以是null
默认值为null

如果您需要询问,那么您需要明确初始化您的字段/变量,因为如果您必须查找它,那么其他人很可能也需要这样做。

原始boolean的值是 false ,可以在这里看到。

正如其他人所提到的,默认情况下 Boolean 的值将是Boolean

Boolean 是 Object。 因此,如果它是一个实例变量,它将是 null。 如果它是在方法中声明的,则必须对其进行初始化,否则会出现编译器错误。

如果您声明为原语,即 boolean。 如果它是实例变量(或 class 变量),则默认值为 false。 如果它是在方法中声明的,您仍然必须将其初始化为 true 或 false,否则会出现编译器错误。

An uninitialized Boolean member (actually a reference to an object of type Boolean ) will have the default value of null .

未初始化的boolean (原始)成员将具有默认值false

Boolean没有默认值。 Boolean必须使用booleanString构造。 如果 object 未初始化,它将指向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

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;
    }
}

output:

primitive: false
object: null

This seems obvious but I had a situation where Jackson, while serializing an object to JSON, was throwing an NPE after calling a getter, just like this one, that returns a primitive boolean which was not assigned. 这让我相信 Jackson 正在接收 null 并试图调用它的方法,因此是 NPE。 我错了。

Moral of the story is that when Java allocates memory for a primitive, that memory has a value even if not initialized, which Java equates to false for a boolean. By contrast, when allocating memory for an uninitialized complex object like a Boolean, it allocates only space for a reference to that object, not the object itself - there is no object in memory to refer to - so resolving that reference results in null.

我认为严格来说,“默认为假”有点离题。 我认为 Java 不会分配 memory 并为其分配 false 值,直到它被明确设置; 我认为 Java 分配 memory 以及 memory 碰巧具有的值与“false”的值相同。 但出于实际目的,它们是相同的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM