我的问题是,既然 new Test()既不是子类,String也不是String本身那么instanceof编译失败的原因呢?它不应该返回虚假.
public class Test{
public static void main(String[] args) {
//Compiles fails
System.out.println(new Test() instanceof String);
//compiles fine but run time class cast exception.
Test = (Test) new Object();;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我已经编辑了我的帖子,所以这就是我真正想知道为什么会有这种差异.为什么编译没有失败,尽管它应该
instanceof 如果在编译时保证始终返回false,则无法应用.
规则是如果将第一个操作数转换为第二个操作数的类型将始终抛出ClassCastException,则编译器不允许instanceof在这些操作数上应用运算符.
你的Test类的一个实例永远不会是一个实例java.lang.String.
如果RelationalExpression对ReferenceType的强制转换(第15.16节)将作为编译时错误被拒绝,则关系表达式的实例同样会产生编译时错误.在这种情况下,instanceof表达式的结果永远不会成立.
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |