其實我比較兩個字符串,當我使用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