使用else if语句和创建新的if语句有什么区别?

时间:2018-01-09 10:58:36

标签: java if-statement

当你可以制作另一个if语句时,制作else if语句有什么意义?即

使用else语句:

if (x > 1) {
    System.out.println("Hello!");
}
if (x < 1) {
    System.out.println("Bye!");
}

没有else语句:

dimens.xml

两个代码都给出了相同的解决方案,那么当输出无差异时输入'else'是什么意思?

4 个答案:

答案 0 :(得分:2)

最大的区别在于,对于else,如果第一个条件为真,则不会检查第二个条件 。如果没有else,将检查第二个条件。

分歧:

  • 如果条件不是相互排斥的,那么else两者都不匹配,并且两个if实体都可以执行。
  • 如果条件涉及副作用,如果没有else,第二次评估将第二次触发副作用。
  • 正如dasblinkenlight在下面的comment中指出的his answer(现在位于https://docs.microsoft.com/en-us/appcenter/distribution/codepush/中),如果x是易失性字段且其值被另一个字段更改第一次检查后和第二次检查之前的线程,没有else两个条件都可以匹配,并且两个if实体都可以执行。

要了解我对评估的意义,让x进行带副作用的函数调用而不仅仅是变量(Java和JavaScript 非常不同,但在这种情况下,我们可以使用JavaScript来演示这个概念):

function x() {
  console.log("x called");
  return 42;
}

console.log("With else:");
if (x() > 1) {
  console.log("> 1");
} else if (x() < 1) {
  console.log("< 1");
}

console.log("Without else:");
if (x() > 1) {
  console.log("> 1");
}
if (x() < 1) {
  console.log("< 1");
}
.as-console-wrapper {
  max-height: 100% !important;
}

请注意,x在没有else的情况下被称为两次,但在else时只被称为

答案 1 :(得分:1)

在你的例子中它没有区别但是现在如果你有一些不同这样的东西:

if (x >= 1) {
    System.out.println("Hello!");
}
if (x <= 1) {
    System.out.println("Bye!");
}

它将打印两个字符串(如果x等于1),因为条件都是true

答案 2 :(得分:1)

就逻辑而言,只要两个语句使用互斥条件,并且无法与正在运行的线程同时更改x,就没有区别。

然而,

  • 如果同时修改x,执行会有所不同:第二个版本可能同时生成"Hello""Bye",或者根本没有输出
  • 执行会有差异,因为第二个条件必须在第二个片段中重新评估,无论第一个条件的计算如何,而第一个片段只评估x > 1
  • 以上假设第一个条件中的语句不会中断线程,即它不是returnbreakcontinuethrow 。如果线程被中断,则不再需要else

答案 3 :(得分:0)

不同之处在于运行时。在if ... else if ... case中如果是正确的情况则else将不会被检查。在if ...然后另一个if ..两个if的情况都将被检查,所以在运行时你还有一个比较。在这样一个小程序中不会有所作为,但考虑一个庞大的程序,有成千上万的情况。 希望我能覆盖你!