有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

为什么这样做有效:

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

但如果没有第一层括号,它将无法工作,反而无法在逻辑上分隔if语句。i、 e.它永远不会超出第一个if语句,也不会按预期工作

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

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


共 (1) 个答案

  1. # 1 楼答案

    因为:

    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所评论的:

    Avoid if(emailStub == "") and instead do if (emailStub.isEmpty()) or if ("".equals(emailStub)) since you should never compare Strings with == or !=. Also consider use of trim() here, such as if (emailStub.trim().isEmpty()).

    How do I compare strings in Java?