Java 正确计算字符串等价性并处理空值
使用equal方法时,如果要比较的字符串为null,则会导致错误:Java 正确计算字符串等价性并处理空值,java,string,Java,String,使用equal方法时,如果要比较的字符串为null,则会导致错误: public static void main(String[] args) { String nullString = null; String nullString2 = null; System.out.println(nullString.equals(nullString2)); } 结果: 线程“main”java.lang.NullPointerException中出现异常 Main.Ma
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)
这会导致我想做的事情出现问题,因为我需要计算字符串,并且使用==运算符经常会导致等价字符串计算为false
在我的实际应用程序中,如果我有以下代码作为循环的一部分,这就是我得到的输出:
System.out.println(pointPerson == storyTasks.get(i).getPointPerson());
if (pointPerson != null) {
System.out.println(pointPerson.equals(storyTasks.get(i).getPointPerson()));
}
假的
符合事实的
错误的
真的
那么,如何防止程序崩溃,同时正确计算字符串呢
我将在我的实际计划中作为长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
}
使用简单的辅助方法:
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);
}
您可以从Apache Commons使用。您也可以使用(从Java 7开始)
如果您想自己编写支持早期版本Java的代码:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
@Vandel简单地说:
(str1==null?str2==null:str1.equals(str2))