这是一个简单的代码
class Foo {
}
class Bar extends Foo {
}
public class Main {
public static void main(String[] args) throws Exception {
fn(null);
}
static void fn(Foo f) {
System.out.println(f instanceof Foo ? "Foo" : "Bar");
}
}
我的问题是:Java如何知道传递的null是
Bar
而不是Foo
?我知道为什么编译器选择Bar而不选择Foo(因为存在从foo到bar的转换,以及从bar到foo的转换,反之亦然)。
但是该方法如何知道此null来自Bar而不是Foo?
null是否包含有关分配给该对象的某些信息?
最佳答案
您正在以错误的方式阅读。对于instanceof
引用,false
始终求值为null
。
从Java specification(重点是我):
关于java - 空引用是类的实例吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8933542/