我已经阅读了几个先前提到过的关于这个主题的问题和答案[或者非常相似],但他们都没有真正解决过这个问题。声明一个新的布尔变量时,它是多余的[例如不必要的]将它初始化为假?
boolean selectedZone = false;
与宣布
相对boolean selectedZone;
我看过的其他帖子是 Why is Java's default value for Boolean set to true?和Default value of Boolean in java
答案 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.
即使变量已初始化,您仍可能希望显式声明其初始值。它可以使代码更清晰,让读取代码的人知道将其设置为该值是有意识的决定。
答案 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