如果我写
int a = 1;
int b = 2;
if (a == b) {
//Do something
} else if (a > b) {
//Do something else
} else if (a < b) {
//Do something else
}
而不是:
if (a == b) {
//Do something
}
if (a > b) {
//Do something else
}
if (a < b) {
//Do something else
}
编译器解释代码或速度的方式有区别吗?我认为没有逻辑上的区别,但肯定有一个if else语句存在的原因。这只是一个单线突破差异。
答案 0 :(得分:6)
在else-if
语句中,当满足条件时,将跳过所有其他else-if
。
而在多个if语句中,它必须经历所有这些语句。
更确切地说,让我们假设a=b
。
考虑您的第一个代码块:
int a = 1;
int b = 1;
if (a == b)
{
//Do something
}
else if (a > b)
{
//Do something else
}
else if (a < b)
{
//Do something else
}
执行时,自a=b
起,它将跳过所有其他条件(a>b
&amp; a<b
)。
检查a=b
。
执行代码块。
所有其他人都被跳过。
考虑您的第二个代码块:
int a = 1;
int b = 1;
if (a == b)
{
//Do something
}
if (a > b)
{
//Do something else
}
if (a < b)
{
//Do something else
}
即使满足第一个条件,也将对它们进行评估。
检查a=b
。
执行代码块。
检查a>b
。
检查a<b
。
答案 1 :(得分:6)
在上面的场景中,除了速度之外,它们是相同的。 If
/ else
将比一系列if
更快,因为如果满足else
条件,则会跳过if
语句。另一方面,在一系列if
中,每个条件都是单独评估的。
在其他情况下,当然逻辑是不一样的,因此用一系列if
替换else
/ if
会破坏程序。例如:
// this:
if(x <= 0) {
x = 1;
}
else { // only true if x started out > 0
x = 37;
}
// is different from this:
if(x <= 0) {
x = 1;
}
if(x > 0) { // always true in this version
x = 37;
}
答案 2 :(得分:0)
你写的第二种代码。编译器将显示每个真实语句的put,并且不会跳过任何条件。其他命令用于确保两个条件之一匹配。
答案 3 :(得分:-1)
与多个if语句相比,if-else语句的时间复杂度更低。因此,if-else steements是非常有利的