我知道不可能像这样在null对象上调用equals方法:
//NOT WORKING
String s1 = null;
String s2 = null;
if(s1.equals(s2))
{
System.out.println("NOT WORKING :'(");
}
Run Code Online (Sandbox Code Playgroud)
但在我的情况下,我想比较两个数据库中的两个对象,这两个对象可以有属性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 :)");
}
Run Code Online (Sandbox Code Playgroud)
我不确定,因为在这种情况下,它不起作用......:
//NOT WORKING
String s1 = null;
String s2 = null;
if(s1.equals(s2)|| s1 == s2 )
{
System.out.println("NOT WORKING :'''(");
}
Run Code Online (Sandbox Code Playgroud)
mik*_*era 31
我通常使用我编写的静态实用函数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);
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
if (MyUtils.equalsWithNulls(s1,s2)) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
这种方法的优点:
Ksh*_*tij 24
在执行equals方法之前,您需要检查至少一个不为null -
if(s1 == s2 || (s1!=null && s1.equals(s2))) {
System.out.println("WORKING :)");
}
Run Code Online (Sandbox Code Playgroud)
这s1==s2将是有效的null==null.但即使一个不是null,那么你需要在做等于之前检查至少s1.
更新:由@'bernard paulus'编辑,如果您使用的是Java 7,则可以使用java.util.Objects.equals(Object,Object)
Jus*_*tas 15
使用的另一种选择:
Objects.equals(identification, criteria.getIdentification())
Run Code Online (Sandbox Code Playgroud)
此类包含用于对对象进行操作的静态实用程序方法.这些实用程序包括null-safe或null-tolerant方法,用于计算对象的哈希代码,返回对象的字符串以及比较两个对象.
自:1.7
public static boolean equals(Object a,Object b)
如果参数彼此相等则返回true,否则返回false.因此,如果两个参数都为null,则返回true,如果只有一个参数为null,则返回false.否则,通过使用第一个参数的equals方法确定相等性.
小智 5
尝试使用org.apache.commons.lang中的ObjectUtils类
public static boolean equals(java.lang.Object object1,
java.lang.Object object2)
Run Code Online (Sandbox Code Playgroud)
从api文档...
比较两个对象是否相等,其中一个或两个对象都可以为null。
ObjectUtils.equals(null,null)= true
ObjectUtils.equals(null,“”)= false
ObjectUtils.equals(“”,null)=否
ObjectUtils.equals(“”,“”)= true
ObjectUtils.equals(Boolean.TRUE,null)=否
ObjectUtils.equals(Boolean.TRUE,“ true”)=否
ObjectUtils.equals(Boolean.TRUE,Boolean.TRUE)= true
ObjectUtils.equals(Boolean.TRUE,Boolean.FALSE)=否
| 归档时间: |
|
| 查看次数: |
38881 次 |
| 最近记录: |