gpt4 book ai didi

java - 在同一实例上调用 equals() 是否比在更改实例上更快?

转载 作者:行者123 更新时间:2023-12-03 19:09:51 26 4
gpt4 key购买 nike

是否有任何原因:

public void test(Object object) {
for (Object other : otherObjects) {
object.equals(other);
}
}

可能比:

public void test(Object object) {
for (Object other : otherObjects) {
other.equals(object);
}
}

(因为 equals() 在第一个示例中调用了相同 对象?)

Is CONSTANT.equals(VARIABLE) faster than VARIABLE.equals(CONSTANT)?相关和 Interview : Java Equals .

最佳答案

这个问题有很多维度;让我们一一解决:

多态性 可以转化为性能提升。选项 1 重复调用 same 方法。选项 2 理论上可以在每次调用期间调用不同的 equals 实现。因此,选项 1 更早地受制于“JIT”编译。

但让我们看看整个事情的“实际”相关性:

查看编译后的字节码很有趣;但在现实世界中并不是那么有用;因为有两种情况:

  • 字节码只是被执行了几次——JIT 没有启动。那么,如果该方法需要 500 或 600 纳秒才能完成,这会有什么不同吗?
  • 字节码的执行频率足以让 JIT 对其进行处理。然后你不知道结果会怎样。

除此之外:

  • 如果您担心现实世界中的性能...那么您可以不使用这两个选项;因为在现实世界中,你会确保这个传入的集合是一个集合。如果 contains() 在您的代码中是一个如此常见的操作,以至于您开始担心选项 1 与选项 2,那么您肯定会改用 O(1) 集合操作!
  • 正如我们所见,选项 1 有时可能会表现更好。并且:它更容易阅读(比选项 2 更令人惊讶)。它在 NPE 方面的概率略有不同。

长话短说:所有论点都支持选项 1。这里是明显的赢家!

最后:当然,基准测试是一个有趣的练习;但请记住:正确的基准测试是 hard !

关于java - 在同一实例上调用 equals() 是否比在更改实例上更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43453831/

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