我在几年前由 C 程序员实现的工作中偶然发现了一个旧的 Java 代码,我们不禁开始讨论该代码 - 即使它可以编译和工作 - 是否实际上是有效的 Java 代码。
final Object o = Boolean.TRUE;
boolean b = (boolean) o;
这基本上是有问题的代码。正如您所看到的,从 Object 到原始布尔值的转换不太好,这应该是不可能的,但由于一些隐式的装箱魔法,它恰好可以工作。
如果我执行以下操作
final Object o = Boolean.TRUE;
if (o instanceof Boolean) {
b = (boolean) o;
}
我什至在将 o 转换为 b 的行上收到警告,说“Cast is incompatible with given instanceof”。这显然是正确的,但由于隐式装箱,它仍然有效。
现在的问题是:Java 规范是否真的允许这种转换,因此应该适用于未来的 JVM 版本?或者它只是碰巧在当前版本中工作,而在未来的 JVM 更新中可能不再工作?