之间的性能是否存在差异
public int method()
{
x = 1;
if (x == 0)
System.out.println("something");
return 1;
}
和
public int method()
{
x = 1;
if (x == 0)
System.out.println("something");
else
return 1;
return 7; //this won't happen because x is 1
}
正如您所注意到的,我在第二个示例中使用了else
。我不知道分支返回是否比正常返回快。
让我们看看jvm指令:
第一种方法一如果分支:
public int ifmethod();
0 aload_0 [this]
1 iconst_1
2 putfield ifperf.main.x : int [22]
5 aload_0 [this]
6 getfield ifperf.main.x : int [22]
9 ifne 20
12 getstatic java.lang.System.out : java.io.PrintStream [24]
15 ldc <String "something"> [30]
17 invokevirtual java.io.PrintStream.println(java.lang.String) : void [32]
20 iconst_1
21 ireturn
其他分支的第二种方法:
public int ifelsemethod();
0 aload_0 [this]
1 iconst_1
2 putfield ifperf.main.x : int [22]
5 aload_0 [this]
6 getfield ifperf.main.x : int [22]
9 ifne 23
12 getstatic java.lang.System.out : java.io.PrintStream [24]
15 ldc <String "something"> [30]
17 invokevirtual java.io.PrintStream.println(java.lang.String) : void [32]
20 goto 25
23 iconst_1
24 ireturn
25 bipush 7
27 ireturn
正如你所看到的,在这种情况下,两种方法都是完全相同的。答案是在第9行,你有测试ifne("IF不等于转到XY行"),所以在一种情况下,你在第20行,在第二种情况下在第23行。然后执行完全相同的指令。
因此,在一种情况下,您将执行0-9->20,21,在另一种情况中,执行0-9->23,24