【问题标题】:Difference between Return and Break statementsReturn 和 Break 语句之间的区别
【发布时间】:2011-07-08 06:54:11
【问题描述】:

return 语句与 break 语句有何不同?
如果我必须退出一个 if 条件,我应该更喜欢哪一个,returnbreak

【问题讨论】:

  • 退出 if 条件是什么意思?通常只在 switch 语句或循环中使用 break,当你想返回到方法的调用者时使用 return。不管你是否使用Android。答案还是一样的:)
  • 我的意思是,如果条件不满足,我不想再执行。
  • 在这种情况下你应该返回。
  • 不同之处在于它们并不相同,它们分别遵循Java语言规范中的规范。 Java 中 没有 方法可以“退出 if 条件”。

标签: java


【解决方案1】:

break 用于退出(转义)您当前正在执行的for-loop、while-loop、switch-statement。

return 将退出您当前正在执行的整个方法(并可能向调用者返回一个值,可选)。

因此,要回答您的问题(正如其他人在 cmets 和答案中指出的那样),您不能使用 breakreturn 来逃避 if-else-statement 本身。它们用于转义其他范围。


考虑以下示例。 xwhile-loop 中的值将决定循环下面的代码是否会被执行:

void f()
{
   int x = -1;
   while(true)
   {
     if(x == 0)
        break;         // escape while() and jump to execute code after the the loop 
     else if(x == 1)
        return;        // will end the function f() immediately,
                       // no further code inside this method will be executed.

     do stuff and eventually set variable x to either 0 or 1
     ...
   }

   code that will be executed on break (but not with return).
   ....
}

【讨论】:

  • 注意:break 也以switch 结尾。 continue 将直接进入 forwhile 的下一个循环。
  • 您可以使用带有标签的break 来转义 if 语句。因此可以转义if 语句。
【解决方案2】:

break 用于退出循环,而return 用于返回调用它的步骤或停止进一步执行。

【讨论】:

    【解决方案3】:

    您将无法仅使用returnbreak 退出if 条件。

    return 用于在方法执行完成后需要从方法返回,而您不想执行其余的方法代码。所以如果你使用return,那么你不仅会从if条件返回,还会从整个方法返回。

    考虑以下方法:

    public void myMethod()
    {
        int i = 10;
    
        if(i==10)
            return;
    
        System.out.println("This will never be printed");
    }
    

    在这里,使用return 会导致在第 3 行之后停止整个方法的执行,并返回到其调用者。

    break 用于脱离loopswitch 语句。考虑这个例子 -

    int i;
    
    for(int j=0; j<10; j++)
    {
        for(i=0; i<10; i++)
        {
            if(i==0)
                break;        // This break will cause the loop (innermost) to stop just after one iteration;
        }
    
        if(j==0)
            break;    // and then this break will cause the outermost loop to stop.
    }
    
    switch(i)
    {
        case 0: break;    // This break will cause execution to skip executing the second case statement
    
        case 1: System.out.println("This will also never be printed");
    }
    

    这种类型的break 语句称为unlabeled break 语句。还有另一种中断形式,称为labeled break。考虑这个例子 -

    int[][] arrayOfInts = { { 32, 87, 3, 589 },
                                { 12, 1076, 2000, 8 },
                                { 622, 127, 77, 955 }
                              };
    int searchfor = 12;
    
    int i;
    int j = 0;
    boolean foundIt = false;
    
    search:
        for (i = 0; i < arrayOfInts.length; i++)
        {
            for (j = 0; j < arrayOfInts[i].length; j++)
            {
                if (arrayOfInts[i][j] == searchfor)
                {
                    foundIt = true;
                    break search;
                }
            }
        }
    

    此示例使用嵌套的 for 循环来搜索二维数组中的值。找到该值后,带有标签的 break 会终止外部 for 循环(标签为“搜索”)。

    您可以从JavaDoc 了解更多关于breakreturn 语句的信息。

    【讨论】:

    • 他可以返回,但是他会退出整个方法。
    【解决方案4】:

    没有冒犯,但其他答案(到目前为止)都没有完全正确。

    break 用于立即终止for 循环、while 循环或switch 语句。您不能在 if 块中使用 break

    return 用于终止一个方法(并可能返回一个值)。

    任何循环或块中的return 当然也会立即终止该循环/块。

    【讨论】:

      【解决方案5】:

      Break 语句将中断整个循环并执行循环之后的代码,Return 不会执行该return 语句之后的代码并执行下一个增量的循环。

      休息

      for(int i=0;i<5;i++){
          print(i)
          if(i==2)
          {
            break;
          }
      }
      

      输出:0 1

      返回

      for(int i=0;i<5;i++)
      {
         print(i)
         if(i==2)
         {
          return;
         }
      }
      

      输出:0 1 3 4

      【讨论】:

      • 不正确。 return 也打破了循环。它将产生与使用break 的先前代码相同的输出。另外,请注意您的代码生成的输出将是0 1 2,而不是0 1,因为您的打印语句发生在相等检查之前。
      • 要生成0 1 3 4,您需要改用continue,并将打印语句放在if语句之后。
      【解决方案6】:

      break:- 这些转移语句绕过正确的执行流程到外部 通过跳过剩余的迭代来结束当前循环

      class test
      {
          public static void main(String []args)
          {
              for(int i=0;i<10;i++)
              {
                  if(i==5)
                  break;
              }
              System.out.println(i);
          }
      } 
      
      output will be 
      0
      1
      2
      3
      4
      

      继续:-这些转移语句将绕过执行流程到循环的起点,以便通过跳过所有剩余指令继续下一次迭代。

      class test
      {
          public static void main(String []args)
          {
              for(int i=0;i<10;i++)
              {
                  if(i==5)
                  continue;
              }
              System.out.println(i);
          }
      } 
      
      output will be:
      0
      1
      2
      3
      4
      6
      7
      8
      9 
      

      返回:- 在方法中的任何时候,return 语句都可以是 用于使执行分支回到方法的调用者。 因此,return 语句立即终止其中的方法 它被执行。下面的例子说明了这一点。这里, return 导致执行返回到 Java 运行时系统, 因为调用 main() 的是运行时系统。

      class test
      {
          public static void main(String []args)
          {
              for(int i=0;i<10;i++)
              {
                  if(i==5)
                  return;
              }
              System.out.println(i)
          }
      } 
      
      
      output will be :
      0
      1
      2
      3
      4
      

      【讨论】:

      • 很好的例子来阐明 return|break|continue 之间的区别。非常感谢!只有一件事,System.out.println(i); 应该在 for 循环内,顺便说一句:)
      【解决方案7】:

      break 中断当前循环并继续,而return 它将中断当前方法并从您调用该方法的位置继续

      【讨论】:

        【解决方案8】:

        您使用 break 打破循环或 switch 语句。

        您在函数中使用 return 来返回一个值。 Return 语句结束函数并将控制权返回到调用函数的位置。

        【讨论】:

          【解决方案9】:

          Return 将退出该方法,正如其他人已经指出的那样。如果你需要跳过方法的某些部分,你可以使用 break,即使没有循环:

          label: if (some condition) {
              // some stuff...
              if (some other condition) break label;
              // more stuff...
          

          }

          请注意,这通常不是很好的风格,虽然有时很有用。

          【讨论】:

            【解决方案10】:

            return 语句与 break 语句有何不同? Return 语句退出当前方法执行并将值返回给调用方法。 Break 用于退出任何循环。

            如果我必须退出一个 if 条件,我应该更喜欢哪一个,返回还是中断?

            要退出方法执行使用return。 要退出任何循环,您可以根据需要使用 break 或 return。

            【讨论】:

              【解决方案11】:

              Break 只会停止循环,而在循环内返回会停止循环并从函数返回。

              【讨论】:

                【解决方案12】:

                break 只是打破循环 & return 将控制权返回给调用者方法。

                【讨论】:

                  【解决方案13】:

                  在这段代码中,i被迭代到3然后循环结束;

                  int function (void)
                  {
                      for (int i=0; i<5; i++)
                      {
                        if (i == 3)
                        {
                           break;
                        }
                      }
                  }
                  

                  在这段代码中,i 被迭代到 3,但有一个输出;

                  int function (void)
                  {
                      for (int i=0; i<5; i++)
                      {
                        if (i == 3)
                        {
                           return i;
                        }
                      }
                  }
                  

                  【讨论】:

                    【解决方案14】:

                    如果你想退出一个简单的if else 语句,但仍停留在特定上下文中(不是通过返回调用上下文),你可以将阻塞条件设置为 false:

                    if(condition){
                    //do stuff
                       if(something happens)
                            condition = false;
                    }
                    

                    这将保证没有进一步的执行,我认为你想要的方式..你只能在loopswitch case中使用break

                    【讨论】:

                    • condition = false 在这里什么也没做。 further execution 包括执行此代码之后的任何内容,无论有无。
                    猜你喜欢
                    • 2019-08-14
                    • 2010-10-02
                    • 1970-01-01
                    • 2013-06-09
                    • 2018-03-26
                    • 1970-01-01
                    • 2016-12-07
                    相关资源
                    最近更新 更多