Java null真的很特别吗?

Java null真的很特别吗?,java,casting,null,Java,Casting,Null,根据: 还有一种特殊的null类型,表达式null的类型 (§3.10.7,§15.8.1),没有名字 由于null类型没有名称,因此无法声明 为null类型的变量或转换为null类型的变量 null引用是null表达式唯一可能的值 类型 空引用始终可以进行加宽引用转换 指向任何引用类型 在实践中,程序员可以忽略null类型而只是假装 null只是一个特殊的文本,可以是任何引用 类型。 如果null真的可以是任何引用类型,那么为什么IS-A测试失败? i、 e 或 对象实例of Type检查引用

根据:

还有一种特殊的null类型,表达式null的类型 (§3.10.7,§15.8.1),没有名字

由于null类型没有名称,因此无法声明 为null类型的变量或转换为null类型的变量

null引用是null表达式唯一可能的值 类型

空引用始终可以进行加宽引用转换 指向任何引用类型

在实践中,程序员可以忽略null类型而只是假装 null只是一个特殊的文本,可以是任何引用 类型。

如果null真的可以是任何引用类型,那么为什么IS-A测试失败? i、 e


对象实例of Type
检查引用对象所引用对象的运行时类型。比如说,

 Animal animal = new Dog();
 animal instanceof Dog; // returns true

instanceof
查找引用所引用的实际对象并测试其运行时类型
null
不引用堆上的实际对象,因此类型
null instanceof Type
当然必须返回false。

null
视为与
对象
完全相反的对象。任何值都可以指定给对象,同样,任何引用类型都可以设置为
null
<如果RHS为
对象
,则code>instanceof
始终为真;同样,如果
null
为LHS,则
instanceof
始终为假。从逻辑上讲,如果一种语言有一个表示一切(Object)的结构,那么它也应该有一个不定义任何内容(null)的结构

现在,回到你原来的问题。在java中,假设您有

对象o=null
,其等效字节码指令将为

0: aconst_null --> Null reference is pushed onto the stack
1: astore_1    --> store a reference into local variable 1 (i.e, Object o)
因此,引擎盖下的
null
以不同的方式处理。
System.out.println(对象的空实例)
将给出false,因为根据语言的语义,
null
是nothing,不能有任何实例。它只是一个占位符,表示引用指向一个有效但无用的值。

instanceof
如果其第一个操作数为
null
,则始终返回
false
。在您的示例中,null可以是任何类型。我不完全确定,但如果将它们更改为
(Object)null instanceof Object
(String)null instanceof String
Object o=null;o对象的instanceof
字符串s=null;s instanceof String
它应该返回true。已回答:这可能是一个很好的答案:@kevin我刚刚尝试运行您以前评论中的代码,即
(String)null instanceof String
它返回false非true。请改正它。
 Animal animal = new Dog();
 animal instanceof Dog; // returns true
0: aconst_null --> Null reference is pushed onto the stack
1: astore_1    --> store a reference into local variable 1 (i.e, Object o)