java - 比较两个对象,其中一个可能为空

标签 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();
    }
}

我的问题是 - 基于或者被比较的变量之一可能为空,什么是比较两个变量同时避免 NullPointerException?

编辑: 首先简单地检查两个对象上的 null 并不能很好地工作,因为我仍然想比较对象是否有引用。例如,如果一项是 null 而另一项不是,我希望它解析为 true,因为变量 已更改

最佳答案

自 1.7 以来,jdk 中提供了新的实用程序类 Objects .

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,它处理 null。

Objects.equals(Object a, Object b) Returns true if the arguments are equal to each other and false otherwise. Consequently, if both arguments are null, true is returned and if exactly one argument is null, false is returned. Otherwise, equality is determined by using the equals method of the first argument.

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

关于java - 比较两个对象,其中一个可能为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21548440/

相关文章:

java - Spring 集成: Adding additional Headers parameters to HTTP outbound request.

java - 获取所有JtextField文本的简单方法

java - 如何使用java中的正则表达式从移动浏览器中的YouTube url获取视频ID

java - Jmx 客户端抛出 InstanceNotFoundException

java - 为什么我的@RestController 中接收到的实体将值设置为 null 而不是默认值

java - Spring security 无法将属性 'secRole' 的类型 [java.lang.String] 的值转换为所需类型 [SecRole]

java - 带有卡尺的 Junit 设置

java - 内部 while 循环永远不会完成

java - 加快 Android 构建过程

java - 在java中,每个类都扩展了Object。那么它如何扩展其他类。因为一个类只能扩展单个类