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

没有括号的Java if语句会产生意外行为,java,if-statement,conditional,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语句。i、 e.它永远不

为什么这样做有效:

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");
当我遇到这个问题时,我觉得很奇怪。

因为:

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

避免使用ifemailStub==并在emailStub.isEmpty时使用 或者如果.equalEmailStub,因为您不应该比较字符串 使用==或!=。还考虑在这里使用修剪,例如,如果是Enabtub.Trim.IsLo../P>
参见。

else如何猜测它与第一个if相关,而不是与第二个if相关?编译器不看缩进。总是用大括号括住任何和所有控制块,比如if和else块,尤其是作为一个新程序员。否则你可能会像现在这样不断地向自己的脚开枪。我可不是一个新的程序员。我也不同意在一个动作行if语句上需要花括号。我只是想知道这里发生了什么。这几乎就像人们使用大括号的原因不仅仅是为了装饰。如果完全使用大括号,就不会在第二块代码中错误缩进else块。不过,请随意解释这一点。另外,请避免使用ifemailStub==而改为使用if emailStub.isEmpty或if.equalsemailStub,因为您永远不应该将字符串与==或!=进行比较。还考虑使用修剪在这里,例如如果EaMeStuff.Trim.iSunTyYes,我同意@ HoVrCRAFTFulfFeels'这是我的一个“为什么不是这个工作”测试,把它放在那里在事故AHHA HOOPS。@ SigaPosiCi nCula没有引号?