这有什么区别:
if(a && b)
{
//code
}
和此:
if(a)
{
if(b)
{
//code
}
}
据我所知b
只会在a
为真时在第一个代码块中进行评估,而第二个代码块将是相同的。
使用一个优于另一个有什么好处吗?代码执行时间?记忆?等
答案 0 :(得分:8)
它们被编译为相同的字节码。没有性能差异。
可读性是唯一的区别。作为一个巨大的概括,短路看起来更好,但嵌套稍微清晰。它真的归结为具体的用例。我通常会短路。
我试过这个。这是代码:
public class Test {
public static void main(String[] args) {
boolean a = 1>0;
boolean b = 0>1;
if (a && b)
System.out.println(5);
if (a)
if (b)
System.out.println(5);
}
}
这编译为:
0: iconst_1
1: istore_1
2: iconst_0
3: istore_2
4: iload_1
5: ifeq 19
8: iload_2
9: ifeq 19
12: getstatic #2
15: iconst_5
16: invokevirtual #3
19: iload_1
20: ifeq 34
23: iload_2
24: ifeq 34
27: getstatic #2
30: iconst_5
31: invokevirtual #3
34: return
注意此块重复两次:
4: iload_1
5: ifeq 19
8: iload_2
9: ifeq 19
12: getstatic #2
15: iconst_5
16: invokevirtual #3
两次都是相同的字节码。
答案 1 :(得分:4)
如果其他与 相关联,则会有所不同。
if(a && b)
{
//do something if both a and b evaluate to true
} else {
//do something if either of a or b is false
}
和此:
if(a)
{
if(b)
{
//do something if both a and b are true
} else {
//do something if only a is true
}
} else {
if(b)
{
//do something if only b is true
} else {
//do something if both a and b are false
}
}
答案 2 :(得分:0)
如果您的第二个示例中的两个if
语句之间没有任何内容,则第一个语句肯定会更清晰,更易读。
但如果有一段代码可以适合两者之间的条件那么只有第二个例子。
答案 3 :(得分:0)
不应该有区别,但在可读性方面,我更喜欢第一个,因为它不那么冗长,而且缩小了。