要理解null在 Java 中的含义,让我们看一个与数字的类比:数字 0 表示缺少某物,而null在引用数据类型时表示相同的事物。如果引用类型(例如String、Object或StringBuilder)的字段未显式分配值,则通过类比原始类型,它会收到一个默认值,该值为null:
代码 | 控制台输出 |
---|---|
|
0
空 |
但是如果你像这样声明一个数组:
String[] strings = new String[12];
将创建一个包含 12 个元素的数组,所有元素都将为null:
代码 | 控制台输出 |
---|---|
|
元素 0:null
元素 1:null 元素 2:null 元素 3:null 元素 4:null 元素 5: null 元素 6:null 元素 7:null 元素 8:null 元素 9:null 元素 10:null 元素 11:null |
如您所见,当与字符串连接时,值null变为字符串“ null ”。也就是说,如果您对其调用toString()方法,如下所示:
String[] strings = null;
System.out.println(strings.toString());
然后你会得到一个NullPointerException(我们稍后会详细讨论异常)。如果您尝试对null调用任何其他方法,也会发生同样的事情(静态方法除外,您很快就会了解):
public static void main(String[] args) {
StringBuilder sb = null;
sb.append("test"); // This will compile, but there will be a runtime error
}
null是一个保留关键字(如public或static ),因此您不能创建名为null 的变量、方法或类。与其他关键字一样,此关键字区分大小写(您可能已经注意到我们在所有地方都以小写字母写null)。这意味着:
String firstName = Null; // Compilation error
String secondName = NULL; // Compilation error
String fullName = null; // This will compile
让我们看看您还可以用null做什么和不能做什么:
-
您可以将null分配给任何引用:
StringBuilder sb = null;
-
null可以转换为任何引用类型:
String s = (String) null; // This will compile, but doing this doesn't make any sense :)
-
null不能分配给原始变量:
int i = null; // This won't compile
-
null可以使用==和!=进行比较
-
null == null返回true
在前面的课程中,我们谈到了 Java 中的一切都是对象,并且每个对象都有一个类型。
在这方面我们可以对null说些什么?null是某种类型的文字,这种类型没有名字。由于此类型没有名称,因此无法声明此类型的变量或对其进行强制转换。因此,null是此未命名类型的唯一代表。在实践中,我们可以忽略这种类型,将null视为一种特殊的文字,可以分配给任何引用变量。
要记住的事情:
- null是引用数据类型的默认值
- null表示“没有价值”
- 如果我们在值为null 的对象上调用任何方法,代码将编译但在运行时我们将得到NullPointerException。
GO TO FULL VERSION