Java中的默认布尔值

Ern*_*dis 7 java boolean

我只是想知道Java之间是否存在差异:

private boolean someValue;

private boolean someValue = false;
Run Code Online (Sandbox Code Playgroud)

第二行可能只是浪费时间?

编辑(摘要):

从答案中我发现几乎没有区别,但是:

"然而,依赖于这样的默认值通常被认为是糟糕的编程风格."

但有一些强有力的论据不这样做 - 见下面接受的答案.

编辑2

我发现在某些情况下必须初始化boolean值,否则代码将无法编译:

boolean someValue;
if (someValue) { // Error here
     // Do something
}
Run Code Online (Sandbox Code Playgroud)

在我的NetBeans IDE中,我收到了错误 - "变量some​​Value可能尚未初始化".

它变得有趣.. :)

ass*_*ias 20

Java中的所有实例和类变量都使用默认值进行初始化:

对于type boolean,默认值为false.

因此,在单线程应用程序中,您的两个语句在功能上是等效的.

但请注意,这boolean b = false;将导致两个写入操作:b首先将为其分配其默认值,false然后将为其分配其初始值(恰好false也是如此).这可能在多线程上下文中具有重要性.请参阅此示例,了解如何显式设置默认值可以引入数据争用.

然而,依赖于这样的默认值通常被认为是糟糕的编程风格.

我认为相反:明确设置默认值是不好的做法:

  • 它引入了不必要的混乱
  • 它可能会引入微妙的并发问题