Java 默认值为';布尔值';和';布尔值';在爪哇

Java 默认值为';布尔值';和';布尔值';在爪哇,java,boolean,default-value,Java,Boolean,Default Value,Java中的boolean(基本体)和boolean(基本体包装器)的默认值是什么?布尔没有默认值布尔值必须使用布尔值或字符串构造。如果对象未初始化,它将指向null class BooleanTester { boolean primitive; Boolean object; public static void main(String[] args) { BooleanTester booleanTester = new BooleanTester

Java中的
boolean
(基本体)和
boolean
(基本体包装器)的默认值是什么?

布尔
没有默认值<代码>布尔值
必须使用
布尔值
字符串
构造。如果对象未初始化,它将指向
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;
    }
}
基本体
布尔值的默认值为
false



未初始化的
Boolean
成员(实际上是对
Boolean
类型的对象的引用)将具有默认值
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;
    }
}

未初始化的
boolean
(原语)成员的默认值为
false
任何
对象的默认值,例如
boolean
,都是
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;
    }
}

布尔值的默认值为false

注意:每个原语都有一个包装类。每个包装器都使用一个默认值为
null
的引用。基本体具有不同的默认值:

boolean -> false

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

float, double -> 0.0

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

布尔值
的默认值(对象)是
null


如果需要询问,则需要显式初始化字段/变量,因为如果必须查找它,则其他人也可能需要这样做

可以看出,基本体
布尔值
的值为false


如其他人所述,
布尔值默认为空。

布尔值是一个对象。因此,如果它是一个实例变量,它将为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,就像这个getter一样,返回一个未赋值的原始布尔值。这让我相信Jackson正在接收一个null并试图对其调用一个方法,因此出现了NPE。我错了

这个故事的寓意是,当Java为一个原语分配内存时,即使未初始化,该内存也有一个值,Java将其等同于布尔值的false。相反,当为未初始化的复杂对象(如布尔对象)分配内存时,它只为该对象的引用分配空间,而不是对象本身—内存中没有可引用的对象—因此解析该引用将导致null


我认为严格地说,“默认为false”有点不恰当。我认为Java在显式设置之前不会分配内存并将其赋值为false;我认为Java分配内存,内存中的任何值都与'false'的值相同。但出于实际目的,它们是一样的。

谢谢您参考官方来源。至于初始化,不需要补偿知识的缺乏。“知识的缺乏”意味着有一些预期的水平可以比较。如果这个最低限度的知识水平是明确的,我同意。如果不是,我认为谨慎的做法是错误地更加明确。总之,这是一个相当个人/团队的决定/意见。@LoBo-我认为补偿潜在的知识缺乏没有什么错。您不知道谁将维护您的代码。任何能使代码更容易理解和/或可读,同时对性能几乎没有影响的东西都只能是一件好事。您应该假设您未来的代码阅读器知道如何编写Java代码。在代码中解释Java是如何工作的不是一个好主意。这就是stackoverflow的作用。我想我们可以提到
布尔值
对象
,这会使第一行的含义显而易见。这听起来很基本,但对于提出这样一个基本问题的人来说,这可能会有所帮助。我认为这3张反对票是因为你说“没有违约”,这是一个相当不清楚的说法。正如您所说,未初始化的对象引用指向
null
null
是默认值,所以当你说没有时,我不确定你指的是什么。(你的意思是像“
Boolean
在默认情况下既不是
true
也不是
false
”)是的,你说的更准确。已经有一个更为简洁的公认答案。我不确定对一篇文章投否决票和对其进行编辑都能得到什么。澄清一下,我没有投否决票,我的编辑与我的评论完全无关。如果您同意建议的措辞,我建议您编辑答案,然后我们可以删除我们的评论以进行清理。此答案包含误导性/部分错误的信息,应在当前状态下对其进行否决/删除。@不可能什么是误导性/部分错误?你能澄清一下吗?请添加官方来源