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

Comparing two objects, either of which could be null

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

为此,我一直在尝试使用object.equals()函数来比较这两个对象。

我很快发现object.equals()不处理null的问题,读完这个问题后,我明白了原因。

因此,我的坏代码示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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();
    }
}

我的问题是-基于所比较的变量中的任何一个可能为空,在避免使用NullPointerException的同时比较两个变量的简单方法是什么?

编辑:首先检查两个对象的空值并不能很好地工作,因为我仍然想比较对象是否有引用。例如,如果一个项目是null,而另一个项目不是,我希望这个问题可以解析为true,因为变量已经改变了。


自从1.7是Objects以来,在JDK中有新的用途类别。

This class consists of static utility methods for operating on
objects. These utilities include null-safe or null-tolerant methods
for computing the hash code of an object, returning a string for an
object, and comparing two objects.

你可以使用Objects.equals,它处理不了任何东西。

BLCK1/

1
if(Objects.equals(myString,myString2)){...}


你可以使用Apache Object Upills

回到布尔昂

This method has been replaced by Java.util.objects.equals(object,object)in Java 7


APACHE提供的使用弦乐

ZZU1


1
2
3
4
    if (this.myString != null && this.myString.equals(comparisonObj.myString))
{
                changedVars.add("myString");
}