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) { ...
}
完全避免了陷阱。另外,检查者喜欢findbugs
或pmd
应该将不正确的版本标记为可疑。
现在,这并不能解释为什么你不能明确地 类型转换 一个boolean
到int
。但是我认为可以通过观察以下内容来理解:
在真正的Java程序中,您 几乎 不需要这样做。
数字<->布尔类型转换不会与其他类型类型转换的工作方式产生冲突。特别是,对于其他类型,有向上转换和向下转换,而Java中的向上转换1不需要显式的类型转换。
您既不能在数字和字符串之间进行类型转换,也不能在其他对象的字符串之间进行类型转换。这些是 转换 ,不是类型转换。而且
int
<->boolean
也是。
1-我在这里用我的术语草率(故意)。正确的Java术语是“扩大”和“缩小”。缩小转换要求显式类型转换,而文字的异常除外。扩大转换不需要类型转换。
以上是 Java为什么不允许强制转换布尔值-> Int? 的全部内容, 来源链接: utcz.com/qa/406773.html