什么是空?
null是任何东西的实例吗?
null属于哪个集合?
它在内存中是如何表示的?
什么是空?
null是任何东西的实例吗?
null属于哪个集合?
它在内存中是如何表示的?
当前回答
null关键字是一个表示空引用的文字,它不引用任何对象。Null是引用类型变量的默认值。
也可以看看
null: Java术语
其他回答
Java中有两大类类型:基本类型和引用类型。声明为基元类型的变量存储值;声明为引用类型的变量存储引用。
String x = null;
在本例中,初始化语句声明了一个变量“x”。" x "存储字符串引用。这里是空的。首先,null不是一个有效的对象实例,因此没有为它分配内存。它只是一个值,指示对象引用当前没有引用对象。
Java中的Null (tm)
在C和c++中,"NULL"是头文件中定义的常量,其值如下:
0
or:
0L
or:
((void*)0)
取决于编译器和内存模型选项。严格地说,NULL不是C/ c++本身的一部分。
在Java(tm)中,“null”不是关键字,而是null类型的特殊文字。它可以强制转换为任何引用类型,但不能转换为任何基本类型,如int或boolean。null字面量的值不一定是0。并且不可能强制转换为null类型或声明该类型的变量。
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表示为零的机器地址/指针。)
字节码表示
Java的null有直接的JVM支持:使用三个指令来实现它:
aconst_null:例如,将一个变量设置为null,如Object o = null; Ifnull和ifnonnull:例如,if (o == null)将对象与null进行比较
第6章“Java虚拟机指令集”接着提到了null对其他指令的影响:它会对许多指令抛出NullPointerException异常。
2.4. “引用类型和值”在通用术语中也提到了null:
引用值也可以是特殊的空引用,即不指向任何对象的引用,这里用null表示。空引用最初没有运行时类型,但可以转换为任何类型。引用类型的默认值是null。
Null是一个特殊值,它不是任何类的实例。下面的程序说明了这一点:
public class X {
void f(Object o)
{
System.out.println(o instanceof String); // Output is "false"
}
public static void main(String[] args) {
new X().f(null);
}
}