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

ins*_*sin -4 java conditional if-statement

为什么这样做:

if(name.equals("email_stub")) {
    if(emailStub == "")
        emailStub = results.getString("text");
} else if(name.equals("fax")) {
    if(fax == "")
        fax = results.getString("text");
} 
Run Code Online (Sandbox Code Playgroud)

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

if(name.equals("email_stub"))
    if(emailStub == "")
        emailStub = results.getString("text");
else if(name.equals("fax"))
    if(fax == "")
        fax = results.getString("text");
Run Code Online (Sandbox Code Playgroud)

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

Fre*_*ula 6

因为这:

if(name.equals("email_stub"))
    if(emailStub == "")
        emailStub = results.getString("text");
else if(name.equals("fax"))
    if(fax == "")
        fax = results.getString("text");
Run Code Online (Sandbox Code Playgroud)

实际上是这样的:

if(name.equals("email_stub"))
    if(emailStub == "")
        emailStub = results.getString("text");
    else if(name.equals("fax"))
        if(fax == "")
            fax = results.getString("text");
Run Code Online (Sandbox Code Playgroud)

没有大括号,else将引用if它之前的第一个.


正如@Hovercraft评论的那样:

避免if(emailStub == ""),而是做if (emailStub.isEmpty()) 或if ("".equals(emailStub))因为你永远不应该将字符串与==或比较!=.也可以考虑在trim()这里使用,例如if (emailStub.trim().isEmpty()).

请参阅如何比较Java中的字符串?.

  • 一加,**但**,避免`if(emailStub =="")`而是做`if(emailStub.isEmpty())`或`if("".equals(emailStub))`因为你永远不应该将字符串与`==`或`!=`进行比较.还可以考虑在这里使用`trim()`,例如`if(emailStub.trim().isEmpty())` (3认同)