比较两个对象,其中任何一个都可以为null

时间:2014-02-04 09:26:53

标签: java

我的一个类中有一个函数,它将自己与同一个类的另一个实例进行比较 - 并找出哪些变量不同。这是为了最大限度地减少主数据库的网络负载(仅上传需要上传的数据,而不是上传整个对象)。

为此,我一直在尝试使用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,因为变量已更改

4 个答案:

答案 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)取代