【发布时间】:2019-11-25 04:22:07
【问题描述】:
假设我有一个 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: 之间有什么性能差异吗?
提前致谢。
【问题讨论】:
-
Integer.compare的合同不保证答案是 -1、0 或 1。使用此选项后果自负。 -
哦,有没有什么情况下它会返回其他东西?还是只是在 Java 的未来版本中发生变化?
-
它可能会在未来的版本中改变。 Oracle 的最新 Java 8 版本返回 -1、0 或 1。我没有检查其他版本。但作为一般原则,您应该永远假设一个方法做了它的 Javadoc 没有说它做的事情。
-
感谢您的建议,我会记住的。
-
如果你追求速度,最好使用
if (x > 0) { ... } else if (x < 0) { ... } else { ... }
标签: java int switch-statement compare sign