将布尔值设置为假是多余的吗?

Posted

技术标签:

【中文标题】将布尔值设置为假是多余的吗?【英文标题】:Is setting a boolean to false redundant? 【发布时间】:2014-09-14 20:01:20 【问题描述】:

我已经阅读了几个先前关于这个主题的问题和答案 [或非常相似],但没有一个真正直截了当地解决这个问题。当声明一个新的布尔变量时,它是否是多余的 [例如不必要] 将其初始化为 false?

boolean selectedZone = false;

相对于仅仅声明

boolean selectedZone;

我看过的其他帖子是 Why is Java's default value for Boolean set to true? 和 Default value of Boolean in java

【问题讨论】:

所以问题是,布尔值是否默认初始化为“false”。其实我不知道也很好奇,在来自C之后,我认为没有什么是理所当然的,所以我很好奇:) 好吧,我相信我说布尔值 are 默认为 false 是正确的,但是有什么理由仅仅声明它并保留它是不正确的在声明时将其初始化为 false。 我会选择第一个选项,只是为了确保,它也使代码更清晰,因为将变量显式设置为 false 可能会更好对算法的理解 ***.com/questions/21509150/… 【参考方案1】:

在大多数情况下它是多余的。例外情况是它是一个局部变量,在这种情况下,它需要在使用前进行初始化。例子:

class Example
    boolean value1;//valid, initialized to false
    public void doStuff()
        boolean value2;//valid, but uninitialized
        System.out.println(value1);//prints "false" (assuming value1 hasn't been changed)
        System.out.println(value2);//invalid, because value2 isn't initialized. This line won't compile.

关于此的一些文档: https://web.archive.org/web/20140814175549/https://docs.oracle.com/javase/specs/jls/se5.0/html/typesValues.html#96595

即使变量已初始化,您仍可能希望显式声明它们的初始值。它可以使代码更清晰易读,并让阅读您的代码的人知道将其设置为该值是有意识的决定。

Related

【讨论】:

【参考方案2】:

它是多余的,但我觉得它更清楚。

同样如此:

int var = 0;

对比

int var;

这不是我编的:

默认值

声明字段时并不总是需要赋值。 已声明但未初始化的字段将设置为 编译器的合理默认值。一般来说,这个默认 将为零或空,具体取决于数据类型。依靠这样的 然而,默认值通常被认为是糟糕的编程 风格。

下图总结了以上数据的默认值 类型。 数据类型默认值(用于字段) byte 0 short 0int 0 long 0L float 0.0f double 0.0d char '\u0000' 字符串(或任何 对象)null布尔假

(Source)

但是,正如 cmets 所建议的,如果它是局部变量,则必须对其进行初始化。

【讨论】:

您是否 100% 确定已初始化为零?好吧,我去看看…… @Zhuinden,是的,Java中的int默认初始化为0。 int var; 后跟 System.out.println("" + var); 将“var 可能尚未初始化”编译错误作为局部变量,但不是作为实例或类(静态)变量,在这种情况下它们被初始化为 @987654326 @ 是的,这正是我所说的,如果您将其作为字段或静态字段,则将其初始化为0,否则会引发编译错误。 @Zhuinden 您没有在问题中提及您的值是 fields 还是 local variables。代码能不能编译就看这个了!【参考方案3】:

是的,您可以跳过将其显式初始化为 false - 但是仅仅因为您可以并不意味着您应该这样做。

明确设置为 false 使代码更加清晰(对于来自其他语言的开发人员来说更容易,这种行为不是默认的)。

【讨论】:

给你点。这样做的原因很简单:它消除了任何疑虑。如果我看到一个未初始化的变量,我只能想知道“这是故意未初始化的,因为它应该是错误的,还是我可能发现了一个错误?”尤其是在不那么小的普通应用程序中,有足够的机会让存在的错误不被注意,因此应该尽一切努力消除任何疑虑。【参考方案4】:

字段和数组组件被初始化为零,局部变量不是。见 JLS:http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.5

【讨论】:

以上是关于将布尔值设置为假是多余的吗?的主要内容,如果未能解决你的问题,请参考以下文章

GSON 不解析布尔值(始终为假)

为啥当值为假时我不能传递过滤数据(它是布尔值)

在javascript中,空字符串总是作为布尔值是假的吗?

当应该为真时,Android Studio 改造响应返回布尔值为假

UITableView Swift中带有布尔值的切换按钮

Python第七天_布尔值的应用