Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将布尔值设置为false是否冗余?_Java_Initialization_Boolean_Variable Declaration - Fatal编程技术网

Java 将布尔值设置为false是否冗余?

Java 将布尔值设置为false是否冗余?,java,initialization,boolean,variable-declaration,Java,Initialization,Boolean,Variable Declaration,我已经阅读了一些关于这个话题的问题和答案(或相当类似的),但没有一个真正直截了当地回答了这个问题。声明新的布尔变量时,将其初始化为false是否是多余的[例如,不必要的] boolean selectedZone = false; 而不是仅仅宣布 boolean selectedZone; 我看过的其他帖子是 这是多余的,但我觉得更清楚 这同样适用于: int var = 0; vs 这不是我编造的: 默认值 声明字段时并不总是需要赋值。 已声明但未初始化的字段将设置为 编译器的合理默认值

我已经阅读了一些关于这个话题的问题和答案(或相当类似的),但没有一个真正直截了当地回答了这个问题。声明新的布尔变量时,将其初始化为false是否是多余的[例如,不必要的]

boolean selectedZone = false;
而不是仅仅宣布

boolean selectedZone;
我看过的其他帖子是
这是多余的,但我觉得更清楚

这同样适用于:

int var = 0;
vs

这不是我编造的:

默认值

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

下表总结了上述数据的默认值 类型。
数据类型默认值(用于字段)
字节0
短0
int 0
长0L
浮动0.0f
双0.0d
字符'\u0000'
字符串(或任何 对象)null
布尔值false

()


但是,正如注释所示,如果是局部变量,则必须对其进行初始化。

字段和数组组件初始化为零,而局部变量则不是。请参阅JLS:

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


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

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

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.
关于这方面的一些文件:

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


所以问题是,布尔值是否默认初始化为“false”。事实上,我不知道也很好奇,从
C
来后,我认为没有什么是理所当然的,所以我很好奇:)我相信我说布尔值默认为假是正确的,但是有没有什么理由仅仅声明它并保持它的状态不如在声明时将其初始化为false那么正确呢?我会选择第一个选项,只是为了确保,而且它使代码更加清晰,由于显式地将变量设置为false可以更好地理解算法,您是否100%确定已初始化为零?好吧,我去检查一下…@Zhuinden,是的,Java中的int默认初始化为0后跟
System.out.println(“+var”)将“var可能尚未初始化”编译错误作为局部变量,但不是作为实例或类(静态)变量,在这种情况下,它们被初始化为
0
是的,这正是我所说的,如果将其作为字段或静态字段,则会将其初始化为
0
,否则会引发编译错误。@Zhuinden您在问题中没有提到您的值是字段还是局部变量。代码是否编译取决于此!给你一点。这样做的原因很简单:它消除了任何疑问。如果我看到一个未初始化的变量,我只能想“这是故意不初始化的,因为它应该是错误的,还是我可能发现了一个bug?”特别是在一个不太小的普通应用程序中,bug有足够的机会保持现有的不被注意,因此应该尽一切努力消除任何疑问。
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.