什么是空?

null是任何东西的实例吗?

null属于哪个集合?

它在内存中是如何表示的?


当前回答

什么是空?

这没什么。

null是任何东西的实例吗?

不,因为它什么也不是,它不可能是任何事物的实例。

null属于哪个集合?

没有任何集合

它在内存中是如何表示的?

如果一些参考指向它,比如:

Object o=new Object();

在堆内存中,分配给新创建对象的空间。o指向内存中指定的空间。

现在 o=null;

这意味着现在o不再指向对象的内存空间。

其他回答

An interesting way to see null in java in my opinion is to see it as something that DOES NOT denote an absence of information but simply as a literal value that can be assigned to a reference of any type. If you think about it if it denoted absence of information then for a1==a2 to be true doesn't make sense (in case they were both assigned a value of null) as they could really could be pointing to ANY object (we simply don't know what objects they should be pointing to)... By the way null == null returns true in java. If java e.g. would be like SQL:1999 then null==null would return unknown (a boolean value in SQL:1999 can take three values : true,false and unknown but in practise unknown is implemented as null in real systems)... http://en.wikipedia.org/wiki/SQL

null是任何东西的实例吗?

不。这就是为什么null instanceof X将为所有类X返回false(不要被这样的事实所愚弄,即可以将null赋值给类型为对象类型的变量。严格来说,赋值涉及隐式类型转换;见下文)。

'null'属于哪个集合?

它是null类型的唯一成员,其中null类型的定义如下:

还有一种特殊的null类型,即表达式null的类型,它没有名称。因为null类型没有名称,所以不可能声明null类型的变量或强制转换为null类型。空引用是null类型表达式的唯一可能值。空引用总是可以转换为任何引用类型。在实践中,程序员可以忽略null类型,只是假装null只是一个特殊的文字,可以是任何引用类型。”JLS 4.1

什么是空?

见上图。在某些上下文中,null用于表示“没有对象”或“未知”或“不可用”,但这些含义是特定于应用程序的。

它在内存中是如何表示的?

这是特定于实现的,您无法在纯Java程序中看到null的表示。(但在大多数(如果不是所有)Java实现中,null表示为零的机器地址/指针。)

Null是一个特殊值,它不是任何东西的实例。很明显,它不能是任何东西的实例。

null关键字是一个表示空引用的文字,它不引用任何对象。Null是引用类型变量的默认值。

也可以看看

null: Java术语

Java中的Null (tm)

在C和c++中,"NULL"是头文件中定义的常量,其值如下:

    0

or:

    0L

or:

    ((void*)0)

取决于编译器和内存模型选项。严格地说,NULL不是C/ c++本身的一部分。

在Java(tm)中,“null”不是关键字,而是null类型的特殊文字。它可以强制转换为任何引用类型,但不能转换为任何基本类型,如int或boolean。null字面量的值不一定是0。并且不可能强制转换为null类型或声明该类型的变量。