我知道无法像这样在空对象上调用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 :'''(");
}
发布于 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
}
这种方法的优点:
发布于 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)
https://stackoverflow.com/questions/-100003735
复制相似问题