JDK中是否有一个方法可以比较两个对象的相等性,从而计算空值?像这样的东西:
public static boolean equals(Object o1, Object o2)
{
if (o1 == null)
{
return o2 == null; // Two nulls are considered equal
}
else if (o2 == null)
{
return false;
}
return o1.equals(o2);
}
Run Code Online (Sandbox Code Playgroud)
自己编写这个方法似乎很愚蠢,因为我认为它必须已经存在于某个地方.
我在我的一个类中有一个函数,它将自己与同一个类的另一个实例进行比较 - 并找出哪些变量不同.这是为了最大限度地减少主数据库的网络负载(仅上传需要上传的数据,而不是上传整个对象).
为此,我一直在尝试使用该object.equals()函数来比较两个对象.
我很快就发现object.equals()它没有处理null,在看完这个问题之后,我理解为什么.
所以我破坏的代码示例如下:
public class MyObject {
String myString;
String myString2;
public String getChangedVars(MyObject comparisonObj) {
ArrayList<String> changedVars = new ArrayList<String>();
if (!this.myString.equals(comparisonObj.myString))
changedVars.add("myString");
if (!this.myString2.equals(comparisonObj.myString2))
changedVars.add("myString2");
return changedVars.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 基于被比较的变量中的任何一个可能为空,比较两个变量同时避免一个变量的简单方法是NullPointerException什么?
编辑:简单地检查两个对象上的null首先不能正常工作,因为我仍然希望比较对象是否有引用.例如,如果一个项目是null,而另一个项目不是,我希望这个解析为true,因为变量已经改变.