据我所知,null
是所有引用类型T
的{{1}}实例。
问题1。 T
的定义是什么? null
如何代表记忆?
考虑以下情况: 我们定义了类
null
现在public class MyClass{
Integer i;
}
可以转换为null
,但我没有明确定义。
问题2。从哪个编译器知道MyClass
可以转换为null
?
答案 0 :(得分:11)
null
实际上不是instanceof
任何东西!
Java语言规范(第15.20.2节)中的instanceof运算符:
在运行时,如果是,则instanceof运算符的结果为true RelationalExpression的值是 not null 和引用 可以将(第15.16节)转换为ReferenceType而不提高a ClassCastException异常。否则结果是错误的。
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)
形式上,null
是null
类型的单例成员,它被定义为每个其他Java类型的子类型。
null
是引用类型,其值是唯一不引用任何对象的引用值。因此,在内存中没有null
的表示。值为null
的引用类型变量的二进制值简单为零(全为零位)。尽管没有明确指定,但它遵循对象的一般初始化语义,任何其他值都会导致实现出现重大问题。
答案 2 :(得分:2)
Null表示 nothing 。没有对象。完全没有。可以将null值分配给任何类型的对象引用。
Null可以转换为任何类型,因为它可以分配给该类型的对象引用。在某种程度上,它可以作为每种类型,除了它在尝试进行字段/方法访问(其中将抛出NullPointerException)并且不每种类型时无用的事实。请注意,null instanceof Foo
始终为false,无论foo
是什么。
答案 3 :(得分:2)
在Java中,变量是对对象的引用。因此,null
值表示未设置的引用(即,对任何内容的引用)。
您可以将变量视为容器(*),在其中可以放置给定类型的对象,当变量为null
时,表示容器为空。很明显,任何容器都可以是空的(无论它应该托管的对象类型如何),你只需要放入任何东西(或删除里面的东西)。
尽管如此,虚空不是任何类型的对象,它只是当你从容器中取出内容时剩下的东西。
(*)我知道容器不是参考值的良好抽象,但它们对于这个具体的解释是好的。