使用等于方法时,如果被比较的字符串为null,则会导致错误:
public static void main(String[] args) {
String nullString = null;
String nullString2 = null;
System.out.println(nullString.equals(nullString2));
}
结果: 线程“main”java.lang.NullPointerException中的异常 在Main.main(Main.java:11)
这导致了我想要做的问题,因为我需要评估字符串,并且经常使用==运算符导致equivelant字符串被评估为false。
在我的实际应用程序中,如果我将以下代码作为循环的一部分,则这是我得到的输出:
System.out.println(pointPerson == storyTasks.get(i).getPointPerson());
if (pointPerson != null) {
System.out.println(pointPerson.equals(storyTasks.get(i).getPointPerson()));
}
假 真正 假 真
那么如何防止程序崩溃,还能正确评估字符串。
我将在我的实际程序中作为long if语句的一部分进行评估:
if (!name.equals(storyTasks.get(i).getName())
|| !desc.equals(storyTasks.get(i)
.getDescription())
|| !est.equals(storyTasks.get(i)
.getOriginalEstimate())
|| !taskStatus.equals(storyTasks.get(i)
.getStatus())
|| !pointPerson.equals(storyTasks.get(i)
.getPointPerson())) {
//code
}
答案 0 :(得分:3)
您可以使用Apache Commons的StringUtils.equals()
。
答案 1 :(得分:2)
使用简单的辅助方法:
public static boolean equalsOrNull(Object o1, Object o2)
{
if (o1 == null && o2 == null) return true;
if (o1 == null) return false;
if (o2 == null) return false;
return o1.equals(o2);
}
答案 2 :(得分:2)
您也可以使用Objects.equals(Object a, Object b)
(自Java 7开始)
如果您想自己编写method以支持早期版本的Java:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}