我和一位队友进行了有趣的交谈。
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

10-01 08:50