为什么Java不允许转换布尔 - > Int?

Jar*_*sen 14 java types casting

我想知道为什么Java不允许从布尔值转换为int,如下所示:

boolean foo = true;
int bar = (int)foo;
Run Code Online (Sandbox Code Playgroud)

这可以在一行代码中完成,例如,

bar = foo ? 1 : 0;
Run Code Online (Sandbox Code Playgroud)

但似乎更好,更容易阅读的方式是允许类型转换,就像doubleint.为什么Java不包含此功能?

Ste*_*n C 26

它不允许这样做,因为Java设计者(正确地)认识到C和C++中的布尔/整数重载是错误的重要来源.

(我记得在一些设计理论中以书面形式看到了这一点,但我找不到它.)

例如:

if (i = 0) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

是合法的,但可能是应用程序中用C或C++编写的错误.

Java通过使boolean整数数据类型的不同类型无法从一个转换为另一个来避免此问题和其他问题.因此,以上是Java中的编译错误.


现在这并不能解释为什么你不能显式地输入一个转换findbugs为a pmd.但我认为可以通过观察以下内容来理解:

  • 很少需要在真正的Java程序中执行此操作.

  • Number < - > boolean casting不会因其他类型转换的工作方式而崩溃.特别是,对于其他类型,有向上转换和向下转换,Java中的向上转换1不需要显式类型转换.

  • 您不能在数字和字符串之间进行类型转换,也不能在字符串之间进行类型转换.这些是转换,而不是类型转换.和boolean< - > int过.


1 - 我在这里(故意)我的术语很草率.正确的Java术语是"扩大"和"缩小".缩小转换需要显式类型转换,文字除外.扩展转换不需要类型转换.