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