如果IF语句覆盖相同的内容,它们会相互冲突吗?

时间:2010-09-12 21:23:58

标签: java

如果您有两个if语句:

int n = -1;

if (n < 0)
    return null;

if (n <= 1)
    return "yay";

它会返回null还是yay?它会从上到下运行代码并在第一个if语句处停止,还是会使用最后一个?

9 个答案:

答案 0 :(得分:3)

当然,将首先评估第一个if语句。 n -1实际上是< 0,因此将执行与该if语句关联的代码体。 null将被退回。

可能让您感到困惑的是,尽管第二个if语句将评估为true,但它永远不会被评估。这是因为return语句在执行时会保留它所在的函数/方法。

如果你写了:

int x = 0;
return x;
x = 5;

x将设置为0x将被退回。返回后的任何代码行都不会执行。

这是另一个例子,澄清:

int x = 10;
if(x < 0)
   return;
x = 0;

x将设置为10x 10实际上不是 < 0,因此将跳过if语句的正文。 x将设置为0

答案 1 :(得分:1)

它将返回null,只是因为返回(在第一次测试中)意味着第二次测试不会被执行。

答案 2 :(得分:1)

它将返回null,因为它是匹配的第一个条件。返回后,其余的函数不会被执行,函数会按顺序执行,因此它们永远不会发生冲突。

“冲突的if语句”的另一个示例是当您创建无法访问的代码时,例如:

if (n < 0)
    return "a";

if (n == -1)
    return "b";

此代码永远不会返回“b”,编译器可能会出错或发出警告。原因是当n = -1时,第一个语句总是被命中,所以永远不会达到第二个语句。

答案 3 :(得分:1)

它返回null,因为它是它遇到的第一个返回。它甚至没有检查第二个例外。

当代码运行时,JVM检查第一个if中的条件,当满足条件时,它执行if if中的内容。如果有return null则返回null。返回后,此方法中不执行任何代码。唯一的例外是您在此次尝试后返回try块和finally块。

答案 4 :(得分:1)

这只是代码的一个小型重新格式,带有一些明确的注释。我发现明确的括号可以帮助一些人看到发生了什么。 只需按照程序流程即可。 如果返回函数,则函数中不会执行任何后续语句。(这是一个白色的谎言,请参阅'finally'异常处理,但禁止...) - 它是一个非常程序化(逐步)过程。

int n = -1;
if (n < 0) {
    return null; // no other statement in this function will be executed 
                 // if this line is reached
}
if (n <= 1) {
    return "yay"; // no other statement in this function will be executed 
                  // if this line is reached
}

答案 5 :(得分:0)

它将返回null。

btw in Java“如果”无效,你必须使用if的“if”和圆括号

答案 6 :(得分:0)

  

它是否会从上到下运行代码并在第一个IF语句处停止

是的,它会的。如果确实证明n&lt; 0,然后它会立即返回null。 (我不知道为什么你把这个问题标记为Java,你发布的代码不是Java代码。)

答案 7 :(得分:0)

将返回null。一旦你点击return语句控制权传递回调用函数设置函数的返回值到你在return关键字后指定的值。

答案 8 :(得分:0)

它将返回null。您发布的将导致'Yay'返回的代码的唯一值为0。