什么时候在 java 中使用 null?
When to use null in java?
假设我有一个节点类型。
public class Node{
private Node next;
private int data;
// other methods including constructor and setting next reference.
}
或使用 null
作为未初始化的值,如下所示:
public class Node{
private Node next = null;
private int data;
}
public class Node{
private Node next; //initialized to null
private int data; //initialized to 0
// other methods including constructor and setting next reference.
}
这里 next
和 data
是实例变量,与局部变量不同,它们被赋予了默认值。因此 next
对象将被分配空值,而作为 int 的 data
将被初始化为 0。
因此您的每个节点实例都将数据初始化为 0,下一个节点设置为空。如果你想要一些特定的初始化,你可以在构造函数中进行或使用相应的 getter/setter 方法。
您的示例之间没有区别,因为 Object
引用的未初始化静态变量和实例变量默认设置为 null
。
如果您想对 next
可能指向或可能指向另一个 Node
对象的情况建模,您可以使用 Optional
(docs here).
例如。您可以初始化 next
指向 Optional.empty()
:
public class Node {
private Optional<Node> next = Optional.empty();
private int data;
}
那么以后插入下一个节点的时候,可以这样:
void setNext(Node node) {
this.next = Optional.of(node);
}
访问next
时需要检查它是否存在。
if (next.isPresent()) {
Node nextNode = next.get();
// do something
} else {
// do something else
}
在这种情况下使用 Optional
的优点是 next
可能指向任何内容这一事实已明确。从而帮助您避免可能的 NullPointerException
.
假设我有一个节点类型。
public class Node{
private Node next;
private int data;
// other methods including constructor and setting next reference.
}
或使用 null
作为未初始化的值,如下所示:
public class Node{
private Node next = null;
private int data;
}
public class Node{
private Node next; //initialized to null
private int data; //initialized to 0
// other methods including constructor and setting next reference.
}
这里 next
和 data
是实例变量,与局部变量不同,它们被赋予了默认值。因此 next
对象将被分配空值,而作为 int 的 data
将被初始化为 0。
因此您的每个节点实例都将数据初始化为 0,下一个节点设置为空。如果你想要一些特定的初始化,你可以在构造函数中进行或使用相应的 getter/setter 方法。
您的示例之间没有区别,因为 Object
引用的未初始化静态变量和实例变量默认设置为 null
。
如果您想对 next
可能指向或可能指向另一个 Node
对象的情况建模,您可以使用 Optional
(docs here).
例如。您可以初始化 next
指向 Optional.empty()
:
public class Node {
private Optional<Node> next = Optional.empty();
private int data;
}
那么以后插入下一个节点的时候,可以这样:
void setNext(Node node) {
this.next = Optional.of(node);
}
访问next
时需要检查它是否存在。
if (next.isPresent()) {
Node nextNode = next.get();
// do something
} else {
// do something else
}
在这种情况下使用 Optional
的优点是 next
可能指向任何内容这一事实已明确。从而帮助您避免可能的 NullPointerException
.