在 Java 中,null
是一个 特殊的字面量,表示 空值 或 无对象,它是引用类型的默认值,用来表示 没有指向任何对象 或 没有分配值的引用。简单来说,null
可以理解为“没有指向任何东西”的意思。
1. 用法:
null
可以赋给引用类型(如类、数组、接口等)的变量,但不能赋给原始数据类型(如int
、double
、boolean
等)的变量。null
并不是一个对象,它只是一个空的引用值,表示这个引用变量目前不指向任何实际的对象。
2. 细节说明:
- 引用类型变量:
null
只能赋值给引用类型变量(如对象、数组、接口)。例如:
1 | String name = null; // 允许,name 是一个引用类型(String) |
- 默认值:对于类的实例变量和数组元素,未显式初始化时,引用类型的变量会被自动赋值为
null
。例如:
1 | public class Example { |
- NullPointerException:如果你尝试对
null
进行操作(如调用方法、访问字段等),会抛出NullPointerException
,因为null
没有指向任何对象,所以不能执行任何操作。
1 | String str = null; |
简单来说,就是当代码尝试使用一个未初始化或指向空的对象时,就会抛出这个异常。
3. null 与原始数据类型的区别:
- 原始数据类型(如
int
、boolean
)不能为null
,它们有明确的默认值,例如:int
默认值为0
,boolean
默认值为false
。 - 只有 引用类型(类、接口、数组、枚举等)才能为
null
,而且null
不是对象,只是一个表示“没有对象”的特殊标识。
4. null 与空字符串的区别:
null
和 空字符串 (""
) 是不同的。null
表示引用没有指向任何对象,完全没有值。- 空字符串
""
是一个有效的字符串对象,它的长度为 0,但是它已经是一个存在的对象,只是没有内容。
示例:
1
2
3
4String str1 = null; // 引用为 null,表示没有指向任何字符串对象
String str2 = ""; // 引用指向一个空字符串对象
System.out.println(str1); // 输出 null
System.out.println(str2); // 输出空字符串
5. Null 与 Optional 的关系:
在 Java 8 及以后版本,为了避免空指针异常,Optional
类提供了一种优雅的方式来处理可能为 null
的值。
Optional
用于包装可能为 null
的对象,避免显式使用 null
1 | import java.util.Optional; |
总结:
null
是 Java 中的一个特殊字面量,表示“没有对象”或“空引用”。- 它只能赋值给引用类型变量,不能赋值给原始数据类型。
- 尝试对
null
进行操作会抛出NullPointerException
,因此在使用时需要小心。