我的一个类中有一个函数,它将自己与同一个类的另一个实例进行比较 - 并找出哪些变量不同。这是为了最大限度地减少主数据库的网络负载(仅上传需要上传的数据,而不是上传整个对象)。
为此,我一直在尝试使用object.equals()
函数来比较两个对象。
我很快发现object.equals()
无法处理null
,在阅读this question后,我明白了原因。
所以我破坏的代码示例如下:
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();
}
}
我的问题是 - 基于 其中一个被比较的变量可能为空,什么是比较两个变量同时避免{{}的简单方法1}}?
编辑:
首先只检查两个对象上的null是不行的,因为我仍然想要比较对象是否有引用。例如,如果一个项目是NullPointerException
而另一个项目没有,我希望此解析为null
,因为变量已更改。
答案 0 :(得分:25)
自1.7以来,jdk中有一个新的实用程序类Objects
。
此类包含用于操作的静态实用程序方法 对象。这些实用程序包括null-safe或null-tolerant方法 用于计算对象的哈希码,返回一个字符串 对象,并比较两个对象。
您可以使用Objects.equals
,它处理null。
Objects.equals(Object a,Object b)如果参数彼此相等且为false,则返回true 除此以外。因此,如果两个参数都为null,则返回true 如果只有一个参数为null,则返回false。除此以外, 通过使用第一个的equals方法确定相等性 参数。
if(Objects.equals(myString,myString2)){...}
答案 1 :(得分:0)
if (this.myString != null && this.myString.equals(comparisonObj.myString))
{
changedVars.add("myString");
}
答案 2 :(得分:0)
使用apache提供的StringUtils
StringUtils.equals(myString,comparisonObj.myString);
答案 3 :(得分:0)
您可以使用Apache object utils
ObjectUtils.equals(Object object1, Object object2)
- 返回布尔值
此方法已被Java 7中的java.util.Objects.equals(Object,Object)取代