if / else的奇怪行为(Java)

时间:2014-09-24 18:33:00

标签: java

我有一段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。

知道这里出了什么问题吗?

2 个答案:

答案 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)) {