【发布时间】:2013-08-31 13:01:18
【问题描述】:
class A {
public static void main(String...args) {
Integer var = 10;
if(var instanceof Character) // Line1
System.out.println("var is a Character");
}
}
我知道 第 1 行 不会编译,因为编译器发现 var 不是 Character。
我不明白为什么编译器会抛出错误而不是返回false 或true。
如果编译器返回false 或true(即将instanceof 操作视为常规的基于if 的验证),那么它会更有用.. 不是吗?
还是我遗漏了一些明显的东西?
【问题讨论】:
-
将
Integer var = 10;更改为Object var = 10;。编译器告诉您,如果您将var声明为Integer,则var不能永远成为instanceof Character。 -
为什么会被否决?这是一个非常合理的问题。
-
@RohitJain 我的想法完全正确。
-
我想如果你想要类似于
instanceof的检查,但不是抛出错误,而是返回false,你可以试试Character.class.isInstance(var),在这种情况下会返回false。跨度> -
@JoshM 查看我对other answer 的评论。 JLS 指定抛出错误是有充分理由的。如果您只需要写
var是Integer,那么您到底为什么要检查它是否不是?除非你的记忆力特别短……
标签: java instanceof