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

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

boolean foo = true;

int bar = (int)foo;

例如,这可以用一行代码来完成,

bar = foo ? 1 : 0;

但似乎更好和更容易阅读的方法是允许类型转换,如double和一样int。Java为什么不包括此功能?

回答:

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

(我记得曾经写过一些设计原理的书,但我找不到。)

例如:

if (i = 0) {

...

}

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

Java通过使boolean整数数据类型成为无法从一种转换为另一种的独特类型,从而避免了这一问题和其他问题。因此,以上是Java中的编译错误。

这并非在所有情况下都有效。例如(在Java中):

if (flag = true) {

...

}

编译。但是,它确实在足够的情况下值得工作。此外,用Java编写上述代码的 惯用 方式是:

if (flag) {

...

}

完全避免了陷阱。另外,检查者喜欢findbugspmd应该将不正确的版本标记为可疑。


现在,这并不能解释为什么你不能明确地 类型转换 一个booleanint。但是我认为可以通过观察以下内容来理解:

  • 在真正的Java程序中,您 几乎 不需要这样做。

  • 数字<->布尔类型转换不会与其他类型类型转换的工作方式产生冲突。特别是,对于其他类型,有向上转换和向下转换,而Java中的向上转换1不需要显式的类型转换。

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


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

以上是 Java为什么不允许强制转换布尔值-&gt; Int? 的全部内容, 来源链接: utcz.com/qa/406773.html

回到顶部