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?。
为什么这样做:
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 doif (emailStub.isEmpty())
orif ("".equals(emailStub))
since you should never compare Strings with==
or!=
. Also consider use oftrim()
here, such asif (emailStub.trim().isEmpty())
.
见How do I compare strings in Java?。