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

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

boolean foo = true; int bar = (int)foo; 

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

 bar = foo ? 1 : 0; 

但似乎更好,更容易阅读的方式是允许类型转换,如doubleint 。 为什么Java不包含此function?

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

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

例如:

 if (i = 0) { ... } 

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

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


现在这并不能解释为什么你不能显式地将一个boolean 类型转换为int 。 但我认为可以通过观察以下内容来理解:

  • 很少需要在真正的Java程序中这样做。

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

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


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

Java支持扩展原始数字类型的转换。 但是,布尔值不被视为数字类型。

受支持的扩展转换列在Java语言规范中的“扩展原始转换”下。

因为Java是强类型的,所以booleanint are two completely different data types ,一种不能被转换为另一种 – 实际上它不能被转换。