我有一段Java代码,它有一个简单的if-else块,如下所示
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
使用这种组合,如果块和验证应该设置为true,则应该触及第三个。相反,最后一个if块被执行并且验证被设置为false。
知道这里出了什么问题吗?
答案 0 :(得分:0)
为什么你只回到第四个区块:
} 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);
答案 1 :(得分:0)
根据您的评论,我相信null是一种String类型,只要您的XML标记为空,就会将其注入XML
文件。因此,当您想要将您的字段与String类型的null进行比较时,使用==
这是完全错误的。
您的评论:
@KickButtowski实际上我正在使用xtreme和填充来解析XML 一个POJO对象。每当XML中的value标记为空时它 将null插入POJO对象中的相应值字段 - user1356042
您必须使用equals()
而不是==
为什么?
equals()
比较您正在寻找的内容
==
比较引用是否引用查看相同的位置
例如:
} else if (null == field1 && null == field2) {
到
} else if ("null".equals(field1) && "null".equals(field2)) {