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

Java if statements without brackets creates unexpected behaviour

为什么这样做:

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");

当我 运行 进入这个问题时,我觉得很奇怪。

因为这个:

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?