首页 > 解决方案 > if 与 if/else 语句?

问题描述

我在一个类中有这样的代码:

if (reload == 0) {
    String mailSuccess = "send success mail";
} else {
    String mailOther = "send other mail";
} 

if (fileError1Exists == true) {
    String mailError1 = "send mail for error 1";
}

if (fileError2Exists == true ) {
    String mailError2 = "send mail for error 2";
}

if (fileError3Exists == true ) {
    String mailError3 = "send mail for error 3";
}

也许是因为我对 Java 还很陌生,所以我想知道这种语法是否干净?每次,我看到一个“if/ese”表达式,更像是这样:

if (condition == 0) {
    String mailSuccess = "send success mail";
} else if (fileError1Exists == true) {
    String mailError1 = "send mail for error 1";
} else if (fileError2Exists == true) {
    String mailError2 = "send mail for error 1";
} else if (fileError3Exists == true) {
    String mailError3 = "send mail for error 1";
} else {
    String mailOther = "send other mail";
} 

像这样一个接一个地保持这些 if 语句是干净的吗?显然,第一个代码示例有效,因为它已经在生产中。但是第一个示例和第二个示例代码做同样的事情吗?通常,它确实如此,对吗?还是因为我缺乏经验而错过了什么?

提前感谢您的反馈。我在以前的帖子中找不到我的遮阳篷。

编辑谢谢大家的回答。它帮助我理解了代码,而且,它帮助我学习了一些新东西!

标签: javaif-statement

解决方案


if并且 if-then-else是条件语句,但具有不同的行为。

使用多个分隔if,JVM 可以执行0条件语句中的每个包含的语句,而if在 JVM 中使用的集合if-then-else将始终执行01包含的语句。

根据经验,您将使用一组分离if的,因为包含的条件语句中的处理是累积的,您将使用if-then-else,因为包含的条件语句中的处理是独占的。

该行为在 JLS 中指定。

14.9.1. if-then 语句

...

否则,通过根据结果值进行选择来继续执行:

如果值为 true,则执行包含的 Statement;...

如果该值为 false,则不采取进一步行动,并且 if-then 语句正常完成。

和 :

14.9.2. if-then-else 语句

通过首先评估表达式来执行 if-then-else 语句。如果结果是布尔类型,则需要进行拆箱转换(第 5.1.8 节)。

...

否则,通过根据结果值进行选择来继续执行:

如果值为真,则执行第一个包含的语句(else 关键字之前的语句);if-then-else 语句正常完成当且仅当该语句的执行正常完成。

如果值为 false,则执行第二个包含的语句(else 关键字之后的语句);...


推荐阅读