Java null.equals(对象o)
我知道在这样的空对象上调用equals方法是不可能的:Java null.equals(对象o),java,object,null,Java,Object,Null,我知道在这样的空对象上调用equals方法是不可能的: //NOT WORKING String s1 = null; String s2 = null; if(s1.equals(s2)) { System.out.println("NOT WORKING :'("); } 但在我的例子中,我想比较两个数据库中的两个对象,这两个对象的属性可以
//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 :'''(");
}
当使用
s1
执行s1.equals(s2)
时,出现NullPointerException的原因不是因为s2为null,而是因为您试图调用s1上的equals方法,该方法为null
试着这样修改它:
if(s1 != null && s1.equals(s2){ /*...*/ }
另外请注意,如果s1不为null,s2为null,您将从equals返回一个
false
,但没有NullPointerException。在执行equals方法之前,您需要检查至少一个值不为null-
if(s1 == s2 || (s1!=null && s1.equals(s2))) {
System.out.println("WORKING :)");
}
这里的s1==s2
将在null==null
的情况下工作。但如果一个也不是null,那么在执行equals之前至少需要检查s1
更新:
正如bernard paulus编辑的那样,如果您使用的是Java 7,则可以使用我通常使用我编写的静态实用程序函数来解决此问题,该函数名为
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
}
这种方法的优点:
- 将完全相等测试的复杂性封装在单个函数调用中。我认为这比每次在代码中嵌入一堆复杂的布尔测试要好得多。因此,它不太可能导致错误
- 使代码更具描述性,因此更易于阅读李>
- 通过在方法名中显式地提到null,您可以向读者传达这样一个信息:他们应该记住一个或两个参数可能都是null
- 首先进行(a==b)测试(这是一种优化,避免了在a和b不为null但引用完全相同的对象的情况下调用a.equals(b)的需要)
- 我想你是在比较两个物体
所以应该是这样
if(s1==null & s2 == null) // both null but equal
return true;
else if(s1 != null && s2 != null && s1.equals(s2)) // both not null and equal
return true;
else
return false;
正确-平等
False-对于“不相等”如果您想知道某个内容是否为“空”,可以使用以下方法进行比较:
if(s1==null)
如果它是空的,它会告诉你是真的。问题是,如果字符串为null,则不能使用equals()方法。因此,第三部分不起作用,因为如果它等于,则不能使用空指针
您应该首先检查对象是否为null,然后使用方法equals检查对象是否为null
另一方面要小心,因为可能需要比较空字符串,在这种情况下,必须使用equal(“”)。如果要比较空字符串,最好以这种方式将空字符串放在第一位:
"".equals(YourStringNotNull);
对不起,我的英语对您有帮助。尝试使用org.apache.commons.lang中的ObjectUtils类
public static boolean equals(java.lang.Object object1,
java.lang.Object object2)
从api文档中
比较两个对象是否相等,其中一个或两个对象可能为空
ObjectUtils.equals(null,null)=true
ObjectUtils.equals(null,“”=false
ObjectUtils.equals(“,null)=false
ObjectUtils.equals(“,”)=true
ObjectUtils.equals(Boolean.TRUE,null)=false
ObjectUtils.equals(Boolean.TRUE,“TRUE”)=false
ObjectUtils.equals(Boolean.TRUE,Boolean.TRUE)=TRUE
ObjectUtils.equals(Boolean.TRUE,Boolean.FALSE)=FALSE在null对象上调用点运算符(调用方法或对象属性)将始终抛出RuntimeException(Exception是静态成员,因为它们不属于对象,而是属于类)
代码块之所以有效,是因为| |是一个快捷运算符:
String s1 = null;
String s2 = null;
if(s1 == s2 || s1.equals(s2))
如果左侧为真,则不计算右侧
与&&相同:如果左侧为false,则不会计算右侧。另一个选项:
Objects.equals(identification, criteria.getIdentification())
此类由用于在上操作的静态实用程序方法组成
物体。这些实用程序包括空安全或空容忍方法
用于计算对象的哈希代码,返回对象的字符串
对象,并比较两个对象
自:
1.7
如果参数彼此相等,则返回true;如果参数为false,则返回false
否则。因此,如果两个参数都为null,则返回true
如果只有一个参数为null,则返回false。否则,,
相等性是通过使用第一个函数的相等方法来确定的
争论
首先,不要将字符串与“==”运算符进行比较,始终使用
equals(String anotherString)
方法进行比较。“==”操作符不是用来比较字符串类型的。在我的例子中,我是用字符串来做这个例子的,但实际上我不会比较字符串:)不要认为你的问题很愚蠢。谢谢你的解决方案和解释。非常好的方法注意,因为Java 7这个方法是内置的:Objects.equals(obj1,obj2)
如果s1
为null,而s2
为null,则仍将执行s1.equals(s2)
并获得NullPointerException。
Objects.equals(identification, criteria.getIdentification())