在Java中:哪个是性能最高的代码?为什么?
if (x==1) {
....
} else if (x==2) {
....
} else if (x==3) {
....
} else if (x==4) {
....
}
... rest code here...
or
try {
if (x==1) {
...
throw MyException(1);
}
if (x==2) {
...
throw MyException(2);
}
if (x==3) {
...
throw MyException(3);
}
if (x==4) {
...
throw MyException(4);
}
} catch(MyException MEx) {
... rest code here ...
}
非常感谢!
答案 0 :(得分:13)
在您的示例中,您正在使用流控制的异常。例外是昂贵的操作(或者,至少比if
和else-if
块更昂贵)。例外情况仅适用于特殊情况。
此外,使用else if
将确保在找到匹配的案例后立即停止检查。仅使用if
将始终检查所有这些,并且将执行任何匹配的情况。如果你有很多案例并且最常见的情况是按照最常见的情况排序,那么使用if-else-if
会更好。
答案 1 :(得分:4)
其他人回答了你的问题,但我想我会指出......
仅仅因为Java没有“goto”命令(已实现),并不意味着你应该使用Exceptions来模拟它们。
答案 2 :(得分:2)
第二个版本不仅性能更差,而且读者也很困惑,而不是如何使用异常。
答案 3 :(得分:0)
目前,两者无法比较。为什么在第二个示例中将“其余代码”放在异常处理程序中,而在第一个示例中没有提到该异常?如果肯定会抛出该异常,那么第一个中的“其余代码”将永远不会被执行。
答案 4 :(得分:0)
当不使用异常时,您可以获得更高的性能。但是异常是一种特殊的结构,不能与控制流结构混淆,例如if-else
。
答案 5 :(得分:0)
不是说我是开关语句的忠实粉丝,但这不是教科书的情况吗?
switch (x) {
case 1:
break;
case 2:
break;
default:
break;
}
...
答案 6 :(得分:0)
...哪个是性能最高的代码
if / elseif构造。
为什么?
因为后者涉及创建MyException类型的对象(内部可以填充堆栈跟踪,为对象分配内存,使用异常代码赋值变量)
虽然差异可能不会乍看起来最差,但绝对是例外情况的不利用。
我可以给你(或尝试)一个关于它的解释,但更好的是你从这个问题的权威人士那里读到它:
有效的Java项目: Use exception for exceptional conditions。
Joshua Bloch。