null引用是一个类的实例吗?

Sle*_*idi 5 java null reference instance

这是一个简单的代码

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");
}
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:Java如何知道传递的null是Bar不是Foo?我知道为什么编译器选择Bar而不是Foo(因为有从foo到bar和bar到foo的转换,反之亦然).但是这个方法怎么会知道这个null来自Bar而不是Foo?null是否包含有关分配给的对象的一些信息?

Eti*_*tel 23

你正在以错误的方式阅读它.instanceof 总是计算为falsenull引用.

Java规范(强调我的):

在运行时,如果RelationalExpression的值不为null并且引用可以在不引发ClassCastException的情况下将引用(第15.16节)转换为ReferenceType ,则instanceof运算符的结果为true .否则结果是错误的.