gpt4 book ai didi

java - CONSTANT.equals(VARIABLE) 是否比 VARIABLE.equals(CONSTANT) 快?

转载 作者:搜寻专家 更新时间:2023-10-30 20:55:00 33 4
gpt4 key购买 nike

我和我的一位队友进行了一次有趣的谈话。

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 .

关于java - CONSTANT.equals(VARIABLE) 是否比 VARIABLE.equals(CONSTANT) 快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10911068/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com