如何在java中检查字符串与空值?
如何在java中检查字符串是否为空值?我正在使用
stringname.equalsignorecase(null)
但它不起作用。
如何在java中检查字符串是否为空值?我正在使用
stringname.equalsignorecase(null)
但它不起作用。
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 引发异常时,需要花费大量时间。其次,如果您只是提前检查空指针,则代码更易于阅读和维护。
s == null
不起作用?