哪个更好?在switch语句中使用break或return?

时间:2016-09-30 03:40:43

标签: java switch-statement memory-efficient

当我在switch语句中使用break或return时,我想知道一些差异。哪个更有效率?有人能向我解释一下吗?非常感谢你。代码如下:

public void foo(){
    int i = 10;
    switch (i) {
        case 1: {
            //code here
            break;  //or return;
        }
        case 2: {
            //code here
            break;  //or return;
        }
        // code  code
        // code  code
        // code  code
        case 10:{
            //code here
            break;  //or return;
        }
        default:{
            //code here
            break;  //or return;
        }
    }
}

4 个答案:

答案 0 :(得分:2)

两者完全不同 - 试图在效率方面对它们进行比较简直是荒谬的。中断终止执行交换机的后续子句并在交换机块之后继续执行。返回终止当前方法的执行并将控制返回给调用方法。他们唯一的共同点就是代码不会落入执行任何其他情况。

一般情况下,我会谨慎使用返回switch语句,不是因为对性能有任何影响,而是因为它使代码行为更难以推理。 (我还认为Java中的switch语句几乎从不需要,并且它在程序中的存在通常表示设计失败,但这是另一个问题)

答案 1 :(得分:1)

在你的情况下,shmosel是对的。 但是如果你想在switch语句中执行操作并返回该值,则需要返回,因为你从交换机获得了一些东西。中断只会停止Switch的执行,因此不会返回任何内容。

两种不同版本之间对功效没有实际影响。他们只是表现得有点不同。占用的内存将类似。

答案 2 :(得分:1)

在这个例子中,意义或性能没有区别。在其他情况下,可能会有所不同......因为breakreturn 意味着不同的事情。 (如果两个构造在给定的上下文中表示不同的东西,它们可能表现不同!)

然而,风格break更好:

  1. 一般来说, 1 ,具有多个退出点的方法(即多个显式和隐式return语句)更难理解。

  2. 在此示例中,假设您决定在switch语句后更改方法以执行某些操作....

  3. 1 - 这是有争议的(见https://stackoverflow.com/a/4838892/139985),也有例外。但我想说它适用于这个例子。

      好吧,好吧,这是因为我的同事改变了我的代码中的返回。所以我只想知道这是否更有效。

    我会问他们来解释他们为什么这么做。重点是,他们可能是出于某种充分的理由,或者是有争议的理由......或者是不正确的理由。如果他们出于不正当的原因这样做,他们需要理解他们的推理是不正确的,这样他们就不会浪费每个人的时间,并且可能会在进行这样的更改时损坏代码库。

答案 3 :(得分:-2)

break意味着代码将退出当前块({})并继续执行以下代码(如果有的话)。

int i = 1;
   switch (i)
   {
      case 1: Console.WriteLine("1"); break;
      case 2: Console.WriteLine("2"); break;
      default: Console.WriteLine("..."); break;
   }

   Console.ReadLine();

在上述情况下,控制台将等待用户输入,因为它能够到达Console.ReadLine();

int i = 1;

   switch (i)
   {
      case 1: Console.WriteLine("1"); return;
      case 2: Console.WriteLine("2"); break;
      default: Console.WriteLine("..."); break;
   }
Console.ReadLine();

对于上面的情况,程序不会执行任何以下代码,当int i为1时,程序永远不会到达Console.ReadLine()

通过调试它们可以清楚地看到它们的行为。