使用Boolean.FALSE/.TRUE初始化布尔值 - 为什么?

Cam*_*ire 7 java boolean

在我们的一些公司项目代码中,我经常阅读以下内容:

boolean foo = Boolean.FALSE;
Run Code Online (Sandbox Code Playgroud)

除了事实上AFAIK我只需要在Java中初始化局部变量(没有像Pascal那样的随机值),而且除了我经常想要进行初始化的布尔运算之外,我在这里想念什么?为什么不:

boolean foo = false;
Run Code Online (Sandbox Code Playgroud)

我不明白.PMD和Findbugs等代码分析工具也标志着它.但为什么?

编辑:没有真正了解字节码,除了它在那里我创建了一个示例类并反编译它.Boolean.FALSE转到:

0: getstatic #15 // Field java/lang/Boolean.FALSE:Ljava/lang/Boolean; 
3: invokevirtual #21 // Method java/lang/Boolean.booleanValue:()Z 
6: istore_1 
Run Code Online (Sandbox Code Playgroud)

"假"变种去了:

0: iconst_1 
1: istore_1 
Run Code Online (Sandbox Code Playgroud)

因此,在不太了解这一点的情况下,我猜更多的语句意味着更多的时间来执行所以它不仅错误而且从长远来看也更慢.

Jes*_*per 11

boolean foo = Boolean.FALSE;
Run Code Online (Sandbox Code Playgroud)

这是一个奇怪且不必要的复杂代码,由可能不太了解Java的人编写.你不应该编写这样的代码,PMD和FindBugs是正确的.

Boolean.FALSE是一个java.lang.Boolean自动取消装箱的对象; 编译器实际上将其转换为:

boolean foo = Boolean.FALSE.booleanValue();
Run Code Online (Sandbox Code Playgroud)

我根本不需要在Java中初始化变量......

成员变量不需要显式初始化; 如果不这样做,它们将被初始化为默认值(false在这种情况下boolean).局部变量确实需要显式初始化; 如果您尝试使用局部变量而不初始化它,编译器将给您一个错误.