null是什么意思?

时间:2013-10-12 16:34:50

标签: java null

据我所知,null是所有引用类型T的{​​{1}}实例。

问题1。 T的定义是什么? null如何代表记忆?

考虑以下情况: 我们定义了类

null

现在public class MyClass{ Integer i; } 可以转换为null,但我没有明确定义。

问题2。从哪个编译器知道MyClass可以转换为null

4 个答案:

答案 0 :(得分:11)

null实际上不是instanceof任何东西!

Java语言规范(第15.20.2节)中的instanceof运算符:

  

在运行时,如果是,则instanceof运算符的结果为true   RelationalExpression的值是 not null 和引用   可以将(第15.16节)转换为ReferenceType而不提高a   ClassCastException异常。否则结果是错误的。

4.1. The Kinds of Types and Values

  

Java编程语言中有两种类型:   原始类型(§4.2)和引用类型(§4.3)。有,   相应地,可以存储的两种数据值   变量,作为参数传递,由方法返回,并在以下操作:   原始值(§4.2)和参考值(§4.3)。

     

类型:       PrimitiveType       ReferenceType还有一个特殊的null类型,表达式的类型为null(§3.10.7§15.8.1),没有名称。

     

因为null类型没有名称,所以无法声明a   null类型的变量或转换为null类型。

     

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

     

null引用总是可以进行扩展引用转换   任何参考类型。

     

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

答案 1 :(得分:10)

形式上,nullnull类型的单例成员,它被定义为每个其他Java类型的子类型。

null是引用类型,其值是唯一不引用任何对象的引用值。因此,在内存中没有null的表示。值为null的引用类型变量的二进制值简单为零(全为零位)。尽管没有明确指定,但它遵循对象的一般初始化语义,任何其他值都会导致实现出现重大问题。

答案 2 :(得分:2)

  1. Null表示 nothing 。没有对象。完全没有。可以将null值分配给任何类型的对象引用。

  2. Null可以转换为任何类型,因为它可以分配给该类型的对象引用。在某种程度上,它可以作为每种类型,除了它在尝试进行字段/方法访问(其中将抛出NullPointerException)并且每种类型时无用的事实。请注意,null instanceof Foo始终为false,无论foo是什么。

答案 3 :(得分:2)

在Java中,变量是对对象的引用。因此,null值表示未设置的引用(即,对任何内容的引用)。

您可以将变量视为容器(*),在其中可以放置给定类型的对象,当变量为null时,表示容器为空。很明显,任何容器都可以是空的(无论它应该托管的对象类型如何),你只需要放入任何东西(或删除里面的东西)。 尽管如此,虚空不是任何类型的对象,它只是当你从容器中取出内容时剩下的东西。

(*)我知道容器不是参考值的良好抽象,但它们对于这个具体的解释是好的。