其实我比较两个字符串,当我使用equals方法时返回true。而当我使用compareTo方法时,它返回22.在java字符串中equals和compareto方法之间的区别
另外我想知道这两个字符串在什么地方不同。使用java我怎么找到这个?
在此先感谢。
其实我比较两个字符串,当我使用equals方法时返回true。而当我使用compareTo方法时,它返回22.在java字符串中equals和compareto方法之间的区别
另外我想知道这两个字符串在什么地方不同。使用java我怎么找到这个?
在此先感谢。
根据的compareTo的文档()
[...]如果两个字符串不同,则要么 他们有一些指标,是一个有效的索引 两个字符串不同的字符 ,或者它们的长度是 不同,或者二者兼有。如果他们在一个或多个 索引位置上具有不同的字符,则令k为这样的索引的最小值 ;那么其位置k处的字符具有较小值的字符串,如通过使用 运算符所确定的,按字典顺序 在另一字符串之前。在这种情况下 ,的compareTo返回两个字符值的差在 位置k在两个串 - 即 ,值:
this.charAt(k)-anotherString.charAt(k)
如果在其中 它们不同没有索引位置,那么较短的字符串 按字典顺序位于较长的 字符串之前。在这种情况下,的compareTo 返回的长度的弦的 的差 - 即,值:
this.length()-anotherString.length()
因此,22是不是在两个串的不同字符的位置,但第一个不相似的字符之间的距离。
关于你的第二个问题,我相信通过在两个字符串中的字符进行简单迭代可以让你轻松地找出它们的不同
这是一个非常奇怪的结果,因为对于compareTo(String)
合同说,两个相等的对象由equal
方法定义应该由compareTo
方法以及等于定义:
从javadoc中String#compareTo(String)
:
“返回: 如果参数字符串等于此字符串,则值为0;如果此字符串按字典顺序小于字符串参数,则值小于0;如果此字符串按字典顺序大于字符串参数,则值大于0。
你介意发布这两个字符串吗?
如果以参数形式给出的字符串按照字典顺序相等(返回0),更大(返回值为< 0)或更小(返回大于0),compareTo方法将显示给您。
根据字符串的compareTo(字符串anotherString)第一个字符位置,
返回: 如果参数字符串等于此字符串,则值为0;如果此字符串按字典顺序小于字符串参数,则该值小于0;如果该字符串按字典顺序大于字符串参数,则该值大于0。
所以,如果这两个字符串相等,比较它们必须返回0
如果返回的compareTo 22则意味着该字符串不相等。 equals方法应该显示为false。你能告诉我们你的代码吗?
这里有些严重错误。当您与equals
和compareTo
进行比较时,最有可能的是比较不同的字符串对。
Sun的字符串出现此错误的机会是零(IMO)。对于源自Sun代码库的任何供应商实现也是如此。一些非Sun代码库可能在String实现中存在一个错误,但这可能是多年前在其他人的代码中已经显示出来的东西。
为了记录在案,为equals
合同compareTo
是equals
回报true
时compareTo
回报0
,并且反之亦然。你的观察,如果正确的话,违反了这一点。但这是一个很大的“如果”。
等于 - 它比较2个字符串的内容,如果两个内容相同,则返回true。
compareto - 比较2个字符串,如果第一个字符串中包含更多的字符,则返回正值,然后返回第二个字符串。如果第一个字符串小于第二个字符串,则返回负数,如果两者相等,则返回0。
你能分享你的代码吗?它有点奇怪 – mhshams 2010-08-27 07:16:11
所以你接受了一个答案 - 现在请向我们展示产生这个结果的字符串。 – Bozho 2010-08-27 07:27:13
你可能想要阅读Javadoc。 – 2010-08-27 07:29:16