我在双链表中使用compareTo()来比较代码和读取字符串,并且无法弄清楚它为什么不起作用。这涉及很多代码,但我不想让你们全部阅读,所以我会尝试发布相关的内容并希望它足够了。
这是代码行。我知道它不完整,但其他一切都正常。
if(p.getCode().compareTo(str)==0){
他们是平等的。在比较发生之前,我将它们打印出来,它们是相同的。
我知道没有给予太多,我有点要求你相信我们他们真的是平等的,但这是为了节省你的时间。我想知道是否有一些关于compareTo()的特殊规则我不知道......
感谢。
答案 0 :(得分:3)
compareTo
由Comparable界面提供。当Comparable.compareTo
返回0
时,Object.equals
没有语法强制要求返回true
。也就是说,对象的两个实例可能完全相同,Comparator.compareTo
的实现不必返回0
。
假设p.getCode
返回String
且参数str
为String
,则String
的实施可确保equals
和compareTo
是一致的。
所以还有其他可能性:
Comparator
。答案 1 :(得分:1)
为了测试相等性,请更好地使用equals()
代替compareTo()
。字符串可能存在差异,可能是尾随空格,或者一些不匹配的大写/小写字符。要谨慎,沿着这些方向的某些东西可能会有所帮助(假设两个字符串都不为空):
if (p.getCode().trim().equalsIgnoreCase(str.trim())) {
现在,如果p.getCode()
不是String
或str
不是String
(如果编译器抱怨方法{{1},您就会知道这一点对象不存在)...在那里,你发现了问题 - 在测试相等性之前,你必须确保两个对象的类型相同。
答案 2 :(得分:0)
他们都使用相同的编码吗?在尝试比较ASCII和Unicode字符串之前,我遇到了问题,特别是在解析文本文件时。
答案 3 :(得分:0)
根据documentation String.compareTo()
和String.equals()
在平等方面是一致的
如果字符串相等,结果为零; compareTo恰好在equals(Object)方法返回true时返回0。
如果你想看到差异,请在两个字符串上使用toCharArray()并将每个字符打印为整数。