gpt4 book ai didi

java - CompareTo 的返回结果溢出?

转载 作者:行者123 更新时间:2023-12-02 08:31:04 52 4
gpt4 key购买 nike

如果我写以下内容是否有可能溢出:

 public class SomeObj implements Comparable<SomeObj> {

private final float data;

public SomeObj(float data) {
this.data = data;
}

public int compareTo(SomeObj object) {
return (int) (this.data - object.data);
}

}

我见过其他 Java 开发人员像我上面那样编写他们的 compareTo 方法作为快捷方式,而不是编写一堆 if-else 语句。如果确实存在溢出的可能性,后者是否是在这里实现 compareTo 方法的最佳方法?

最佳答案

您绝对不应该编写这样的 compareTo 方法:

  • 如果您有 this.data = 0.5fobject.data = 0.2f 例如,它将会失败 - 大概应该返回一个正值,但它会返回0
  • 它可能会溢出 int 的范围(我什至不记得 Java 在这种情况下做了什么,即兴的 - 在这种情况下进行转换几乎总是错误的方法,所以我不通常需要记住)
  • 对于 int 的类似情况,您最终可能会从负数中减去正数,并由于溢出而得到一个大的

我确信只要付出足够的努力,我就能想到其他令人讨厌的情况。

幸运的是,修复很简单:

return Float.compare(this.data, object.data);

关于java - CompareTo 的返回结果溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8800826/

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