Aeq*_*tas 4 java optimization if-statement short-circuiting
这有什么区别:
if(a && b)
{
//code
}
Run Code Online (Sandbox Code Playgroud)
还有这个:
if(a)
{
if(b)
{
//code
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,b只有在第一个代码块中才会得到评估,如果a为真,那么第二个代码块就是同一个东西.
使用一个优于另一个有什么好处吗?代码执行时间?记忆?等等
它们被编译为相同的字节码.没有性能差异.
可读性是唯一的区别.作为一个巨大的概括,短路看起来更好,但嵌套稍微清晰.它真的归结为具体的用例.我通常会短路.
我试过这个.这是代码:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
这编译为:
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
Run Code Online (Sandbox Code Playgroud)
注意这个块如何重复两次:
4: iload_1
5: ifeq 19
8: iload_2
9: ifeq 19
12: getstatic #2
15: iconst_5
16: invokevirtual #3
Run Code Online (Sandbox Code Playgroud)
两次都是相同的字节码.
| 归档时间: |
|
| 查看次数: |
183 次 |
| 最近记录: |