没有括号的Java if语句会产生意外行为

时间:2015-07-23 15:02:44

标签: java if-statement conditional

为什么这样做:

if(name.equals("email_stub")) {
    if(emailStub == "")
        emailStub = results.getString("text");
} else if(name.equals("fax")) {
    if(fax == "")
        fax = results.getString("text");
} 

但是没有第一层括号,它将无法工作,而是无法在逻辑上分离if语句。即它永远不会超出第一个if语句,并且不会按预期工作。

if(name.equals("email_stub"))
    if(emailStub == "")
        emailStub = results.getString("text");
else if(name.equals("fax"))
    if(fax == "")
        fax = results.getString("text");

当我遇到这个问题时,我觉得很奇怪。

1 个答案:

答案 0 :(得分:6)

因为:

if(name.equals("email_stub"))
    if(emailStub == "")
        emailStub = results.getString("text");
else if(name.equals("fax"))
    if(fax == "")
        fax = results.getString("text");

实际上就是这样:

if(name.equals("email_stub"))
    if(emailStub == "")
        emailStub = results.getString("text");
    else if(name.equals("fax"))
        if(fax == "")
            fax = results.getString("text");

如果没有大括号,else将引用它前面的第一个if

正如@Hovercraft评论的那样:

  

避免if(emailStub == "")而是if (emailStub.isEmpty())   或if ("".equals(emailStub)),因为你永远不应该比较字符串   使用==!=。另请考虑在此处使用trim(),例如if (emailStub.trim().isEmpty())

请参阅How do I compare strings in Java?