如果我写
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语句存在的原因.这只是一个单线突破差异.
在 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
).
检查是否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
}
Run Code Online (Sandbox Code Playgroud)
即使满足第一个条件,也将评估所有条件.
检查是否a=b
.
执行代码块.
检查是否a>b
.
检查是否a<b
.
在上面的场景中,除了速度之外,它们是相同的.If
/ else
将比一系列if
s 更快,因为else
如果if
条件满足则跳过语句.if
另一方面,在一系列s中,分别评估每个条件.
当然,在其他情况下,逻辑是不一样的,因此用一系列s 替换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;
}
Run Code Online (Sandbox Code Playgroud)