将布尔值设置为false冗余?

时间:2014-07-23 14:51:17

标签: java initialization boolean variable-declaration

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

boolean selectedZone = false;

与宣布

相对
boolean selectedZone;

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

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:3)

这是多余的,但我发现它更清楚。

同样适用:

int var = 0;

VS

int var;

我没有提出这个问题:

  

默认值

     

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

     

下表总结了上述数据的默认值   类型。
数据类型默认值(对于字段)
字节0
短0 int 0
  long 0L
float 0.0f
double 0.0d
char'\ u0000'
字符串(或任何字符串)   object)null
布尔值false

Source

但是,正如评论所示,如果它是局部变量,则必须初始化。

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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