Java &引用;比较法违反其总合同&引用;但我只是比较两个长值?
我有以下比较功能:Java &引用;比较法违反其总合同&引用;但我只是比较两个长值?,java,android,collections,Java,Android,Collections,我有以下比较功能: @Override public int compareTo(OptimizedMatch another) { long c = this.compareTime - another.compareTime; if(c>0){ return 1; } else if(c<0){ return -1; } return 0
@Override
public int compareTo(OptimizedMatch another) {
long c = this.compareTime - another.compareTime;
if(c>0){
return 1;
} else if(c<0){
return -1;
}
return 0;
}
为什么我会犯这个错误?!我在比较两个长值,这不应该只是标准值吗
编辑:我发现了错误,是我的IDE(Eclipse)有缺陷。在清理我的项目并重新启动它之后。您的equals()方法可能有问题 还有,不是吗
this.dateStamp + (LENGTH_OF_DAY - (this.dateTimeStamp - this.dateStamp))
相当于
2*this.dateStamp + LENGTH_OF_DAY - this.dateTimeStamp
我不知道这些字段是做什么的,但看起来它不是你想在那里做的。你是对的,我只是没有缩短公式,让它更清楚它应该做什么。这些字段都是标准的long,所以所有的普通操作符在理论上都可以正常工作,不是吗?是的,我只是感到困惑。问题很可能出在equals()中,正如我写的和链接的问题所表明的那样。如果compareTo返回0且对象不相等(例如,如果使用标准的equals实现),java会抱怨。
2*this.dateStamp + LENGTH_OF_DAY - this.dateTimeStamp