我正在使用这段代码进行测试:
public class TestNull {
public void leftComparison(String s) {
if (s == null);
}
public void rightComparison(String s) {
if (null == s);
}
}
我使用javac 1.8.0_05编译了它,然后检查了字节码:
public class TestNull {
....
public void leftComparison(java.lang.String);
Code:
0: aload_1
1: ifnonnull 4
4: return
public void rightComparison(java.lang.String);
Code:
0: aconst_null
1: aload_1
2: if_acmpne 5
5: return
}
显然,leftComparison
编译后在栈上推送和弹出1个变量,而 rightComparison
推送和弹出2个变量。我猜测,leftComparison
比 rightComparison
稍微更有效率一些?
我想知道为什么编译器不重写 rightComparison
的代码呢?我认为这两个比较应该在语义上是等价的,不是吗?
ifnots
字节码,javac在翻译时非常逐字逐句。 - Hot Licks