gpt4 book ai didi

java - 在 switch 语句中使用 Math.signum(x) 还是 Integer.compare(x, 0) 更好?

转载 作者:行者123 更新时间:2023-12-01 19:57:50 25 4
gpt4 key购买 nike

假设我有一个 int x,并且我希望代码根据 x 的符号执行不同的操作。如果我使用 switch 语句,使用 Integer.compare(x, 0) 还是 Math.signum(x) 更好(更快)?

switch (Integer.compare(x, 0)) {
case 1:
// positive
break;
case -1:
// negative
break;
case 0:
// zero
break;
}

对比

switch (Math.signum(x)) {
case 1:
// positive
break;
case -1:
// negative
break;
case 0:
// zero
break;
}

此外,使用 case 0:default: 之间是否有性能差异?提前致谢。

最佳答案

总结所有评论:

  1. 使用 Integer.compare存在 API 合约未指定结果为 -1、0 或 1 的问题。(这是当前实现返回的内容,但它可能在未来版本中更改。)

  2. Math.signum需要 floatdouble参数并返回相同类型的结果。因此,您需要在 int 中进行类型转换(到 switch )陈述。此外,转换和其他事情很可能会降低效率。

  3. Integer.signum效率更高并且它指定返回 -1、0 或 1。

  4. 在本例中if (x > 0) { ... } else if (x < 0) { ... } else { ... }可能是最有效的。

如果您真的关心,您可以编写一个微基准来测试上面的陈述。

但是请注意过早优化的陷阱;即浪费时间来优化方法,而性能实际上对整体应用程序性能的影响很小。

关于java - 在 switch 语句中使用 Math.signum(x) 还是 Integer.compare(x, 0) 更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59025206/

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