如何在java中检查字符串与空值?

2022-08-31 10:17:11

如何在java中检查字符串是否为空值?我正在使用

stringname.equalsignorecase(null)

但它不起作用。


答案 1

string == null比较对象是否为空。 比较该对象内部的值。 并不总是有效,因为您正在尝试查看对象是否相同,而不是它们表示的值。string.equals("foo")string == "foo"


更长的答案:

如果你尝试这个,它将不起作用,因为你已经发现:

String foo = null;
if (foo.equals(null)) {
    // That fails every time. 
}

原因是 foo 是 null,所以它不知道 .equals 是什么;那里没有对象可以调用 .equals。

你可能想要的是:

String foo = null;
if (foo == null) {
    // That will work.
}

在处理字符串时,防止空值的典型方法是:

String foo = null;
String bar = "Some string";
...
if (foo != null && foo.equals(bar)) {
    // Do something here.
}

这样,如果 foo 为 null,它就不会评估条件的后半部分,一切都很好。

如果您使用的是字符串文本(而不是变量),最简单的方法是:

String foo = null;
...
if ("some String".equals(foo)) {
    // Do something here.
}

如果你想解决这个问题,Apache Commons有一个类 - StringUtils - 提供空安全的字符串操作。

if (StringUtils.equals(foo, bar)) {
    // Do something here.
}

另一个回应是开玩笑,并说你应该这样做:

boolean isNull = false;
try {
    stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
    isNull = true;
}

请不要这样做。您应该只为异常错误引发异常;如果您期望空值,则应提前检查它,而不是让它引发异常。

在我看来,这有两个原因。首先,例外是缓慢的;检查 null 的速度很快,但是当 JVM 引发异常时,需要花费大量时间。其次,如果您只是提前检查空指针,则代码更易于阅读和维护。


答案 2
s == null

不起作用?