Groovy 等于和NullPointerException
为什么我不能得到b1的NPE,等于(a1)?当b1为空时?您确实在Groovy 等于和NullPointerException,groovy,Groovy,为什么我不能得到b1的NPE,等于(a1)?当b1为空时?您确实在b1处获得NPE。等于(a1),因为您的b1为null&null。anyMethod()将引发该异常 如果您的a1也为null,那么您就不会得到NPE,因为&&运算符在遇到false时不会计算其余条件 |需要一个true,&需要一个false来短路 请参阅此内容,以了解有关名为的概念的更多信息 更新:-对于您的情况,它将是这样的:- @Test public void testDoc() { String a1 = "12
b1处获得NPE。等于(a1)
,因为您的b1
为null
&null。anyMethod()
将引发该异常
如果您的a1
也为null
,那么您就不会得到NPE
,因为&&
运算符在遇到false
时不会计算其余条件
|
需要一个true
,&
需要一个false
来短路
请参阅此内容,以了解有关名为的概念的更多信息
更新:-对于您的情况,它将是这样的:-
@Test
public void testDoc()
{
String a1 = "123"
String b1 = null;
String a2 = null
String b2 = "456";
boolean westId1 =
(a1 == b1) || ((a1 != null)&& b1.equals(a1));
println westId1
boolean westId2 =
(a2 == b2) || ((a2 != null)&& b2.equals(a2));
println westId2
}
您可以随时简化它,但我根据您的要求给出了条件,以便帮助您更好地理解 您确实在
b1.equals(a1)
获得NPE,因为您的b1
为null
&null。anyMethod()
将引发该异常
如果您的a1
也为null
,那么您就不会得到NPE
,因为&&
运算符在遇到false
时不会计算其余条件
|
需要一个true
,&
需要一个false
来短路
请参阅此内容,以了解有关名为的概念的更多信息
更新:-对于您的情况,它将是这样的:-
@Test
public void testDoc()
{
String a1 = "123"
String b1 = null;
String a2 = null
String b2 = "456";
boolean westId1 =
(a1 == b1) || ((a1 != null)&& b1.equals(a1));
println westId1
boolean westId2 =
(a2 == b2) || ((a2 != null)&& b2.equals(a2));
println westId2
}
您可以随时简化它,但我根据您的要求给出了条件,以便帮助您更好地理解 这是groovy,因此您进入了
NullObject
如果您这样做:
boolean westId1 = (a1==null && b1==null) || (a1!=null && b1!=null && a1.equals(b1));
它将打印:
b = null
println b.getClass().name
所以b
是NullObject
的一个实例。而NullObject
定义为:
'org.codehaus.groovy.runtime.NullObject'
这就是为什么你没有得到NPE。短路规则确实适用于这样的逻辑语句,但问题中的语句不会被短路,相等的语句只是由Groovy处理
试一试:
public boolean equals(Object to) {
return to == null;
}
这是groovy,因此您进入了
NullObject
如果您这样做:
boolean westId1 = (a1==null && b1==null) || (a1!=null && b1!=null && a1.equals(b1));
它将打印:
b = null
println b.getClass().name
所以b
是NullObject
的一个实例。而NullObject
定义为:
'org.codehaus.groovy.runtime.NullObject'
这就是为什么你没有得到NPE。短路规则确实适用于这样的逻辑语句,但问题中的语句不会被短路,相等的语句只是由Groovy处理
试一试:
public boolean equals(Object to) {
return to == null;
}
请修复示例代码中的语法错误,例如
println westId1
。现在很难知道问题是在您的问题中还是在您真正使用的代码中。您应该在这个问题中添加groovy标记,然后请修复示例代码中的语法错误,例如println westId1
。现在很难知道问题是在您的问题中,还是在您真正使用的代码中。您应该在这个问题中添加groovy标记,那么您如何将此条件检查更改为仅当字符串均为null或均为非null且相等时才计算为true?请检查我的更新!我已经根据你的话制定了条件,在你的句子中提到的确切位置添加了和/或@凤凰城:a1==null?a2==null:a1.equals(a2)
但是a1==b1应该注意在nullPatashu时返回true,如果a1为null且a2不是,那么xpression返回什么?那么您如何更改此条件检查以仅当字符串都为null或都为非null且相等时才计算为true?请检查我的更新!我已经根据你的话制定了条件,在你的句子中提到的确切位置添加了和/或@凤凰城:a1==null?a2==null:a1.equals(a2)
但是a1==b1应该注意在nullPatashu时返回true,如果a1为null,a2不是,那么xpression返回什么?