Java编译器是否优化了这样的语句
if (a == true) {
if (b == true) {
if (c == true) {
if(d == true) {
//code to process stands here
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
至
if (a == true && b==true && c==true && d == true)
Run Code Online (Sandbox Code Playgroud)
所以这是我的第一个问题:两者都采用完全相同的"CPU周期",或者是第一个"慢"的变体.
我的第二个问题是,第一个带有级联的变体,如果被认为是糟糕的编程风格,因为它是如此冗长?
(我喜欢第一个变体,因为我可以更好地逻辑分组我的表达式并更好地评论它们(我的if语句比示例中的更复杂),但也许这是糟糕的编程风格?)甚至更慢,这就是我要问的原因.. .
谢谢Jens
Mac*_*tka 16
首先不要使用a == TRUE:
if (a) { ... }
Run Code Online (Sandbox Code Playgroud)
其次这样的代码:
public class Test {
public int f(boolean a, boolean b, boolean c, boolean d) {
if (a && b && c && d) {
return 1;
} else {
return 2;
}
}
public int g(boolean a, boolean b, boolean c, boolean d) {
if (a)
if (b)
if (c)
if (d)
return 1;
return 2;
}
}
Run Code Online (Sandbox Code Playgroud)
编译成(javap -c Test):
public class Test extends java.lang.Object{
public Test();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public int f(boolean, boolean, boolean, boolean);
Code:
0: iload_1
1: ifeq 19
4: iload_2
5: ifeq 19
8: iload_3
9: ifeq 19
12: iload 4
14: ifeq 19
17: iconst_1
18: ireturn
19: iconst_2
20: ireturn
public int g(boolean, boolean, boolean, boolean);
Code:
0: iload_1
1: ifeq 19
4: iload_2
5: ifeq 19
8: iload_3
9: ifeq 19
12: iload 4
14: ifeq 19
17: iconst_1
18: ireturn
19: iconst_2
20: ireturn
}
Run Code Online (Sandbox Code Playgroud)
如您所见,字节码是相同的.
第三 - 它取决于问题,但通常它太冗长.如果您评论此类详细信息:
x = x + 1; // Increase x by 1 - 可能汇编程序只是异常,因为add rax, 1 ; Increase x by 1它rax是通知x.| 归档时间: |
|
| 查看次数: |
607 次 |
| 最近记录: |