多个if语句之间是否存在差异,否则是否存在差异?

Mil*_*ilo 4 c if-statement

如果我写

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

}
Run Code Online (Sandbox Code Playgroud)

而不是:

if (a == b) {

//Do something

}
if (a > b) {

//Do something else

}
if (a < b) {

//Do something else

}
Run Code Online (Sandbox Code Playgroud)

编译器解释代码或速度的方式有区别吗?我认为没有逻辑上的区别,但肯定有一个if else语句存在的原因.这只是一个单线突破差异.

Rag*_*ull 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
}
Run Code Online (Sandbox Code Playgroud)

执行时,因为a=b它将跳过所有其他条件(a>b&a<b).

  1. 检查是否a=b.

  2. 执行代码块.

  3. 所有其他人都被跳过了.

考虑你的第二个代码块:

int a = 1;
int b = 1;
if (a == b) 
{
     //Do something
}
if (a > b) 
{
    //Do something else
}
if (a < b) 
{
    //Do something else
}
Run Code Online (Sandbox Code Playgroud)

即使满足第一个条件,也将评估所有条件.

  1. 检查是否a=b.

  2. 执行代码块.

  3. 检查是否a>b.

  4. 检查是否a<b.


eli*_*ide 6

在上面的场景中,除了速度之外,它们是相同的.If/ else将比一系列ifs 更快,因为else如果if条件满足则跳过语句.if另一方面,在一系列s中,分别评估每个条件.

当然,在其他情况下,逻辑是不一样的,因此用一系列s 替换if/ 会破坏程序.例:elseif

// 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;
}
Run Code Online (Sandbox Code Playgroud)