Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较器/able中的equals()与compareTo()(理论)_Java_Collections_Equals_Comparator_Comparable - Fatal编程技术网

Java 比较器/able中的equals()与compareTo()(理论)

Java 比较器/able中的equals()与compareTo()(理论),java,collections,equals,comparator,comparable,Java,Collections,Equals,Comparator,Comparable,我不懂Javadoc: The natural ordering for a class C is said to be consistent with equals if and only if (e1.compareTo((Object)e2) == 0) has the same boolean value as e1.equals((Object)e2) for every e1 and e2 of class C. 为什么会这样 我理解e1.equals(e2)=true应该

我不懂Javadoc:

The natural ordering for a class C is said to be consistent with equals if and only if
  (e1.compareTo((Object)e2) == 0) has the same boolean value as e1.equals((Object)e2) for
  every e1 and e2 of class C.
为什么会这样

我理解e1.equals(e2)=true应该总是意味着e1.compareTo(e2)==0,但我不理解为什么相反的应该是true。比较不是平等!2个相等的对象应与0进行比较,但如果排序标准与其情况无关,则2个不同的对象应能够与0进行比较。我的意思是,让不同的对象相等是不正确的,但是不同的对象具有0比较为什么不呢


编辑:后来它说,对于某些兼容性问题,强烈建议一致性,因此问题是,Javadoc没有说使用与equals不一致的比较是错误的。它只是定义了一个术语,用于与相等的比较

当你得到一个选择时,通常比较与相等是很好的,比如给定a和B,a要么小于,要么等于,要么大于B,但不一定要这样做


尽管如此,记录这一点很重要-调用方可能会对与equals不一致的顺序感到非常困惑。

他们只是在谈论自然顺序。您可能需要一种不同的订单

java文档谈到自然订单。你可以自由地比较它们。但如果是关于自然顺序的话,你不认为,它必须是双向的吗

即使在每天50个月亮之后,我们也无法看到整数的自然顺序发生逆转;)

< P>作为一个例子考虑类,在这一类中,方法和彼此不一致:

文件说:

公共布尔等于(对象x)

将此BigDecimal与指定的对象进行相等比较。 与compareTo不同,此方法认为两个BigDecimal对象相等 仅当它们的值和比例相等时(因此2.0不等于 2.00(使用此方法进行比较时)


我不明白这个问题,这是
compareTo()
equals()
之间“一致性”的定义,它没有说你应该做什么或不应该做什么,只是给出了一个定义。好吧,但它后面说了它的建议,我不明白为什么。即使如此,我也无法理解为什么在系统哲学的观点中,与零相比的不相等对象不一致,但为什么认为compareTo==0意味着完全相等是一致的?我想说的是,在排序时,它们的优先级并不不同。让两个对象的计算结果相等,但排序优先级不同,这很奇怪(但不一定是错误的)。对不同的、可排序的对象进行排序,却不能确定排序优先级,这很奇怪(但也不一定是错的)。对,这是一个完美的例子。但为什么这应该被视为“不一致”?2.0不完全是2.00,但它们在比较时应处于模糊的排序位置