我和一位队友进行了有趣的交谈。CONSTANT.equals(VARIABLE)
是否比Java中的VARIABLE.equals(CONSTANT)
快?
我怀疑这是错误的陈述。但是,我试图找出背后的定性推理是什么?
我知道在两种情况下,性能不会与任何一种重要状态有所不同。但这是最佳做法下的建议,这让我感到不舒服。这就是我正在寻求一个很好的理由来说明这个案例的原因。
请帮忙
最佳答案
有趣的问题。这是我写的测试:
public class EqualsTest {
public static String CONST = "const";
public void constEqVar(String var) {
CONST.equals(var);
}
public void varEqConst(String var) {
var.equals(CONST);
}
}
然后,我使用javac:
javac EqualsTest.java
对其进行了编译,并使用javap
:javap -c EqualsTest
对其进行了反汇编。这是javap输出的相关代码段:
public void constEqVar(java.lang.String);
Code:
0: getstatic #2; //Field CONST:Ljava/lang/String;
3: aload_1
4: invokevirtual #3; //Method java/lang/String.equals:(Ljava/lang/Object;)Z
7: pop
8: return
public void varEqConst(java.lang.String);
Code:
0: aload_1
1: getstatic #2; //Field CONST:Ljava/lang/String;
4: invokevirtual #3; //Method java/lang/String.equals:(Ljava/lang/Object;)Z
7: pop
8: return
如您所见,这两种方法之间的唯一区别是操作顺序:第一种情况是getstatic,然后是aload_1,第二种情况是aload_1 + getstatic。
很明显,执行时间不应取决于此顺序。
选择
const.equals(var)
而不是var.equals(const)
的唯一原因是避免NullPointerException
。