gpt4 book ai didi

java - 为什么 Java 不允许转换 Boolean -> Int?

转载 作者:太空狗 更新时间:2023-10-29 23:02:14 24 4
gpt4 key购买 nike

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

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

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

bar = foo ? 1 : 0;

但似乎更好、更易于阅读的方法是允许类型转换,如 doubleint。为什么 Java 不包含此功能?

最佳答案

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

(我记得在一些设计原理中看到过,但我找不到。)

例如:

if (i = 0) {
...
}

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

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

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

if (flag = true) {
...
}

编译。但是,它确实在足够多的情况下起作用,值得。此外,用 Java 编写上述内容的惯用方法是:

if (flag) {
...
}

这完全避免了陷阱。此外,像 findbugspmd 这样的检查器应该将不正确的版本标记为可疑。 (风格检查器应该指出 flag == true 是糟糕的风格!)


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

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

  • Number <-> boolean casting 与其他类型转换的工作方式不同。特别是,对于其他类型,存在向上转换和向下转换,并且 Java 中的向上转换1 不需要显式类型转换。

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


1 - 我在这里(故意)对我的术语草率。正确的 Java 术语是“扩大”和“缩小”。缩小转换需要一个显式类型转换,但文字有一个有限的异常(exception)。扩大转换不需要类型转换。

关于java - 为什么 Java 不允许转换 Boolean -> Int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16281760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com