正确评估字符串等价和处理空值

时间:2013-12-27 17:25:17

标签: java string

使用等于方法时,如果被比较的字符串为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
                        }

3 个答案:

答案 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));
}