当我在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;
}
}
}
答案 0 :(得分:2)
两者完全不同 - 试图在效率方面对它们进行比较简直是荒谬的。中断终止执行交换机的后续子句并在交换机块之后继续执行。返回终止当前方法的执行并将控制返回给调用方法。他们唯一的共同点就是代码不会落入执行任何其他情况。
一般情况下,我会谨慎使用返回switch语句,不是因为对性能有任何影响,而是因为它使代码行为更难以推理。 (我还认为Java中的switch语句几乎从不需要,并且它在程序中的存在通常表示设计失败,但这是另一个问题)
答案 1 :(得分:1)
两种不同版本之间对功效没有实际影响。他们只是表现得有点不同。占用的内存将类似。
答案 2 :(得分:1)
在这个例子中,意义或性能没有区别。在其他情况下,可能会有所不同......因为break
和return
意味着不同的事情。 (如果两个构造在给定的上下文中表示不同的东西,它们可能表现不同!)
然而,风格break
更好:
一般来说, 1 ,具有多个退出点的方法(即多个显式和隐式return
语句)更难理解。
在此示例中,假设您决定在switch
语句后更改方法以执行某些操作....
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()
。
通过调试它们可以清楚地看到它们的行为。