首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java null.equals(对象o)

Java null.equals(对象o)
EN

Stack Overflow用户
提问于 2018-03-29 04:54:08
回答 2查看 0关注 0票数 0

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

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

但在我的情况下,我想比较来自两个数据库的两个对象,这两个对象可以有属性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 :'''(");
            }
EN

回答 2

Stack Overflow用户

发布于 2018-03-29 13:15:27

我通常使用我写的一个静态实用程序函数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
}

这种方法的优点:

  • 在单个函数调用中包装完整平等测试的复杂性。我认为这比每次你在代码中嵌入一堆复杂的布尔测试要好得多。结果导致错误的可能性要小得多。
  • 使您的代码更具描述性,因此更易于阅读。
  • 通过明确提及方法名称中的空值,您可以告诉读者他们应该记住一个或两个参数可能为空。
  • (a == b)是否先测试(一种优化避免了在a和b非空的相当普遍的情况下调用a.equals(b)的必要性,但是指的是完全相同的对象)
票数 0
EN

Stack Overflow用户

发布于 2018-03-29 14:53:29

你需要检查atleast之前不等于null等于方法 -

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

这里s1==s2将起作用null==null。但是,如果即使有一个不是空的,那么在做等于之前你也需要至少检查s1。

如由@'bernard paulus'编辑,如果您使用的是Java 7,则可以使用java.util.Objects.equals(Object,Object)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档