compareTo()== 0不起作用

时间:2012-10-16 21:41:16

标签: java compareto

我在双链表中使用compareTo()来比较代码和读取字符串,并且无法弄清楚它为什么不起作用。这涉及很多代码,但我不想让你们全部阅读,所以我会尝试发布相关的内容并希望它足够了。

这是代码行。我知道它不完整,但其他一切都正常。

if(p.getCode().compareTo(str)==0){

他们是平等的。在比较发生之前,我将它们打印出来,它们是相同的。

我知道没有给予太多,我有点要求你相信我们他们真的是平等的,但这是为了节省你的时间。我想知道是否有一些关于compareTo()的特殊规则我不知道......

感谢。

4 个答案:

答案 0 :(得分:3)

{p> compareToComparable界面提供。当Comparable.compareTo返回0时,Object.equals没有语法强制要求返回true。也就是说,对象的两个实例可能完全相同,Comparator.compareTo的实现不必返回0

假设p.getCode返回String且参数strString,则String的实施可确保equalscompareTo是一致的。

所以还有其他可能性:

  1. 您在一个或两个参数中有前导或尾随空格。如果您要沿着添加调试日志记录的路线走下去,我经常会发现在每个字符串周围使用管道(' |')这些空格是可见的。
  2. 大写字母与小写字符有区别。字符串比较区分大小写,并且必须使用特殊的不区分大小写的Comparator

答案 1 :(得分:1)

为了测试相等性,请更好地使用equals()代替compareTo()。字符串可能存在差异,可能是尾随空格,或者一些不匹配的大写/小写字符。要谨慎,沿着这些方向的某些东西可能会有所帮助(假设两个字符串都不为空):

if (p.getCode().trim().equalsIgnoreCase(str.trim())) {

现在,如果p.getCode()不是Stringstr不是String(如果编译器抱怨方法{{1},您就会知道这一点对象不存在)...在那里,你发现了问题 - 在测试相等性之前,你必须确保两个对象的类型相同。

答案 2 :(得分:0)

他们都使用相同的编码吗?在尝试比较ASCII和Unicode字符串之前,我遇到了问题,特别是在解析文本文件时。

答案 3 :(得分:0)

根据documentation String.compareTo()String.equals()在平等方面是一致的

  

如果字符串相等,结果为零; compareTo恰好在equals(Object)方法返回true时返回0。

如果你想看到差异,请在两个字符串上使用toCharArray()并将每个字符打印为整数。