if/else(Java)的奇怪行为
我有一段Java代码,它有一个简单的if-else块,如下所示if/else(Java)的奇怪行为,java,Java,我有一段Java代码,它有一个简单的if-else块,如下所示 if (null != field1 && null != field2 && field1.equals(field2)) { validated = true; } else if (null == field1 && null == field2) { validated = true; } e
if (null != field1 && null != field2 && field1.equals(field2))
{
validated = true;
} else if (null == field1 && null == field2) {
validated = true;
} else if ((field1 == null && field2.length() == 0)
|| (field2 == null && field1.length() == 0)) {
validated = true;
} else if (null != field1 && null != field2 && !field1.equals(field2)) {
validated = false;
return validated;
}
奇异性:当field1和field2获得如下值时
field1 = ""
field2 = null
使用此组合,这将命中第三个if块,并且应将validated设置为true。相反,执行和验证的最后一个if块被设置为false
你知道这里出了什么问题吗?你为什么只在第四个街区回来:
} else if (null != field1 && null != field2 && !field1.equals(field2)) {
validated = false;
return validated;
}
如果field1和field2设置为这样,则会出现其他错误,它只会到达第三个块。我复制并粘贴了你的代码,只是删除了返回。这将返回您预期的验证结果:
String field1 = "";
String field2 = null;
boolean validated = false;
if (null != field1 && null != field2 && field1.equals(field2)) {
validated = true;
} else if (null == field1 && null == field2) {
validated = true;
} else if ((field1 == null && field2.length() == 0)
|| (field2 == null && field1.length() == 0)) {
validated = true;
} else if (null != field1 && null != field2 && !field1.equals(field2)) {
validated = false;
}
System.out.println(validated);
根据您的一条评论,我相信null是一种字符串类型,只要XML标记为空,就可以将它注入
XML
文件中。因此,当您想将您的字段与字符串类型的null进行比较时,您使用的=
是完全错误的
您的评论:
@KickButtowski实际上我正在使用xtreme解析XML并填充
POJO对象。只要XML中的值标记为空,它就会
将null插入POJO对象内的相应值字段-
用户1356042
您必须使用equals()
而不是=
为什么?
equals()
compare againt用于比较您要查找的内容
=
如果引用正在查看同一位置,则比较引用
例如:
} else if (null == field1 && null == field2) {
到
field2
是字符串“null”
?请修复第二个代码片段,它不清楚。它来自哪里?是Java代码吗?是来自文本文件吗?修复了代码片段。很抱歉输入了不相关的内容,但是我的foo==null
v会更加一致null==foo
用法,否则它意味着有理由采取不同的做法。而且,这有点难读。我可能会使用早期返回。@user1356042为什么不也使用equals()检查空值?null。equals(field1)
没有多大意义。如果field1
为空,则null==field1
可以。你的意思是“null”。等于(field1)
?是的,我已经意识到了,我想问op更多的问题:)
} else if ("null".equals(field1) && "null".equals(field2)) {