Java null.equals(对象 o)

标签 java object null

我知道不可能像这样在空对象上调用 equals 方法:

//NOT WORKING
            String s1 = null;
            String s2 = null;
            if(s1.equals(s2))
            {
                System.out.println("NOT WORKING :'(");
            }

但就我而言,我想比较两个数据库中的两个对象,这两个对象的属性可以为 null...

那么什么是比较两个属性的方法,知道我们不确定值是null还是填充。

这个方法好不好?

//WORKING
            String s1 = "test";
            String s2 = "test";
            if(s1 == s2 || s1.equals(s2))
            {
                System.out.println("WORKING :)");
            }

            //WORKING
            String s1 = null;
            String s2 = null;
            if(s1 == s2 || s1.equals(s2))
            {
                System.out.println("WORKING :)");
            }

我不确定,因为在这种情况下它不起作用......:

//NOT WORKING
            String s1 = null;
            String s2 = null;
            if(s1.equals(s2)|| s1 == s2  )
            {
                System.out.println("NOT WORKING :'''(");
            }

最佳答案

我通常使用我编写的名为 equalsWithNulls 的静态实用程序函数来解决此问题:

class MyUtils {
  public static final boolean equalsWithNulls(Object a, Object b) {
    if (a==b) return true;
    if ((a==null)||(b==null)) return false;
    return a.equals(b);
  }
}

用法:

if (MyUtils.equalsWithNulls(s1,s2)) {
  // do stuff
}

这种方法的优点:

  • 在单个函数调用中总结了完全相等测试的复杂性。我认为这比每次执行此操作时都在代码中嵌入一堆复杂的 boolean 测试要好得多。因此导致错误的可能性要小得多。
  • 使您的代码更具描述性,因此更易于阅读。
  • 通过在方法名称中明确提及 null,您可以向读者传达他们应该记住一个或两个参数可能为 null。
  • 是否首先进行 (a==b) 测试(在 a 和 b 不为空但引用完全相同的对象的相当常见情况下,无需调用 a.equals(b) 的优化)

关于Java null.equals(对象 o),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11011742/

相关文章:

java - 使java类文件在线同步的任何方法

Java接口(interface)类型作为构造函数参数

c# - 遍历 C# 中的对象字段

ruby-on-rails - 表单中的 rails nils

delphi - System.Variants.NullStrictConvert 的范围

java - Guava checkNotNull 有什么意义

java - 未知的移动目的地 : STORESCP

PHP类在构造函数中分配属性

c# - 以最简单的方式实例化一个对象数组?

java - Apache Tomcat 执行具有相同启动时加载的 Servlet