isEmpty() 方法是否检查空值?

Del*_*xeD -1 java javafx

我总是在很多代码中看到这一点:

String s;
if (s == null || s.isEmpty()) {
//do something
}
Run Code Online (Sandbox Code Playgroud)

但这还不够

String s;
if (s.isEmpty()) {
//do something
}
Run Code Online (Sandbox Code Playgroud)

我很好奇,尤其是当我检查 JavaFX TextField 是否为空时。

Jam*_*s_D 5

一般来说,

s.isEmpty()
Run Code Online (Sandbox Code Playgroud)

检查是否s空字符串,即其中没有字符的字符串。如果s为 null,则尝试调用s.isEmpty()(或尝试调用 上的任何其他方法s)将引发空指针异常。

(请注意,询问“该方法是否检查空值”实际上没有意义isEmpty():没有办法s.isEmpty()检查是否为空:如果为空,则无法调用该方法。)ss

在您引用的特定情况下:检查文本字段是否为空,请注意,TextField.getText()除非您首先明确将其设置为 null(使用 ),否则不会返回 null textField.setText(null)。换句话说,默认值是空字符串,并且当用户键入时调用的“内部”方法不会将文本属性设置为 null。由于您的文本字段应仅限于定义它的直接类(或创建它的 FXML 文件的控制器),因此您可以控制对其setText(...)方法的调用,然后可以保证

TextField textField = ... ;

if (textField.getText() == null || textField.getText().isEmpty()) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

相当于

TextField textField = ... ;

if (textField.getText().isEmpty()) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

通过保证这textField.getText() == null总是错误的。