代码之家  ›  专栏  ›  技术社区  ›  user339946

如果语句包含相同的内容,它们是否会相互冲突?

  •  1
  • user339946  · 技术社区  · 14 年前

    如果你有两个 if 声明:

    int n = -1;
    
    if (n < 0)
        return null;
    
    if (n <= 1)
        return "yay";
    

    它会返回null还是yay?它是否会自上而下地运行代码,并在第一次运行时停止 声明,还是使用最后一个?

    9 回复  |  直到 14 年前
        1
  •  3
  •   Sion Sheevok    14 年前

    第一个 if n 哪个是 -1 < 0 ,因此与之相关的代码体 如果 语句将被执行。 null

    让你困惑的是 如果 语句将求值为真,它将永远不会被求值。这是因为 return 语句在执行时,离开它所在的函数/方法。

    如果你写了:

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

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

    下面是另一个例子,澄清一下:

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

    将设置为 10 10 事实上 <0 ,所以 如果 0

        2
  •  1
  •   pstanton    14 年前

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

        3
  •  1
  •   Sander Rijken    14 年前

    null ,因为这是匹配的第一个条件。在返回之后,函数的其余部分不会执行,函数是按顺序执行的,因此它们永远不会冲突。

    if (n < 0)
        return "a";
    
    if (n == -1)
        return "b";
    

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

        4
  •  1
  •   amorfis    14 年前

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

    return null 然后返回null。返回后,此方法中不执行任何代码。唯一的例外是你回来的时候 try finally 在这次尝试之后阻止。

        5
  •  1
  •   recursive    14 年前

    这只是代码的一个小的重新格式化,带有一些明确的注释。我发现显式大括号可以帮助一些人看到发生了什么。 如果从返回函数,则不会执行函数中的后续语句。 (这是一个善意的谎言,请参阅“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
    }
    
        6
  •  0
  •   Xorty    14 年前

    顺便说一句,在Java中“If”是无效的,您必须使用“If”和圆括号表示If

        7
  •  0
  •   casablanca    14 年前

    它是否会自上而下地遍历代码,并在第一个IF语句处停止

        8
  •  0
  •   Doon    14 年前

    将返回null。一旦您点击了return语句,控件就会传回调用函数,将函数的返回值设置为您在return关键字之后指定的值。

        9
  •  0
  •   Steve Pierce    14 年前