溢出compareTo的返回结果?

时间:2012-01-10 09:14:19

标签: java compareto

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

 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方法的最佳方法?

2 个答案:

答案 0 :(得分:9)

你绝对应该写这样的compareTo方法:

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

我确信我能用足够的努力想出其他令人讨厌的情况。

幸运的是,修复很简单:

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

答案 1 :(得分:0)

除非你有充分的理由,否则我会使用double代替float来最小化表示错误(乘以9位!)在一个对象中,使用float可能甚至没有保存任何记忆。

因此,无论您使用float还是double还是int,我都会使用哪种方式。

public int compareTo(SomeObj object) {
   return Double.compare(data, object.data);
}
相关问题