什么是空?
null是任何东西的实例吗?
null属于哪个集合?
它在内存中是如何表示的?
什么是空?
null是任何东西的实例吗?
null属于哪个集合?
它在内存中是如何表示的?
当前回答
Java中有两大类类型:基本类型和引用类型。声明为基元类型的变量存储值;声明为引用类型的变量存储引用。
String x = null;
在本例中,初始化语句声明了一个变量“x”。" x "存储字符串引用。这里是空的。首先,null不是一个有效的对象实例,因此没有为它分配内存。它只是一个值,指示对象引用当前没有引用对象。
其他回答
Null不是任何类的实例。
然而,你可以将null赋值给任何类型的变量(对象或数组):
// this is false
boolean nope = (null instanceof String);
// but you can still use it as a String
String x = null;
"abc".startsWith(null);
Java中有两大类类型:基本类型和引用类型。声明为基元类型的变量存储值;声明为引用类型的变量存储引用。
String x = null;
在本例中,初始化语句声明了一个变量“x”。" x "存储字符串引用。这里是空的。首先,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表示为零的机器地址/指针。)
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
简短准确的回答,正式回答您的所有问题:
3.10.7. 空文字 空类型有一个值,即空引用,由 null literal null,由ASCII字符组成。 空字面值总是null类型。
只有赋值为null类型的引用才会被分配。您不需要为引用分配任何值(对象)。 这样的分配取决于JVM将占用多少引用以及将在哪个内存区域分配引用。