[英]Difference between equals and compareto method in java string
實際上,我正在比較兩個字符串,當我使用equals方法時,該字符串返回true。 而當我使用compareTo方法時,它返回22。
我也想知道那兩個字符串在什么地方不同。 使用java我如何找到這個?
提前致謝。
根據compareTo()的文檔
[...]如果兩個字符串不同,那么它們要么在某個索引處具有不同的字符(這是兩個字符串的有效索引),要么它們的長度不同,或者兩者都存在。 如果它們在一個或多個索引位置具有不同的字符,則令k為最小索引; 那么,在字符串位置k處的字符具有較小值(通過使用<運算符確定)的字符串,按字典順序在另一個字符串之前。 在這種情況下,compareTo返回兩個字符串中位置k處兩個字符值的差,即值:
this.charAt(k)-anotherString.charAt(k)
如果在它們之間沒有索引位置不同,則較短的字符串在字典上在較長的字符串之前。 在這種情況下,compareTo返回字符串長度的差-即值:
this.length()-anotherString.length()
因此,22不是兩個字符串中不同字符的位置,而是第一個不同字符之間的距離。
至於您的第二個問題,我相信對兩個字符串中的字符進行簡單的迭代將使您可以輕松地確定第一個字符位置的不同之處
這是一個非常奇怪的結果,因為compareTo(String)
的約定說, equal
方法定義的兩個相等對象也應該由compareTo
方法定義的equal
:
來自javadoc String#compareTo(String)
:
“返回:如果參數字符串等於此字符串,則值為0;如果該字符串在字典上小於字符串參數,則小於0;如果該字符串在字典上大於字符串參數,則值大於0。”
您介意發布這兩個字符串嗎?
等於-比較兩個字符串內容,如果兩個內容相同,否則返回true。
compareto-比較第二個字符串,如果第一個字符串比第二個字符串多,則返回正數。 如果第一個字符串小於第二個字符串,則返回負數;如果兩個字符串相等,則返回0。
通常,compareTo方法向您顯示,如果作為參數給出的字符串在字典上相等(返回0),則更大(返回<0)或更小(返回> 0)。
根據String compareTo(String anotherString),
返回:如果參數字符串等於此字符串,則返回值0;否則返回0。 如果此字符串在字典上小於字符串參數,則小於0的值; 如果該字符串在字典上大於字符串參數,則該值大於0。
因此,如果兩個字符串相等,則比較它們必須返回0。
如果compareTo返回22,則表示字符串不相等。 equals方法應顯示為false。 您能告訴我們您的代碼嗎?
這里有些嚴重錯誤。 與equals
和compareTo
進行比較時,很可能會比較不同的String對。
Sun實施String時出錯的可能性為零(IMO)。 這同樣適用於從Sun代碼庫派生的任何供應商實現。 某些非Sun代碼庫可能在String實現中存在錯誤,但這是幾年前在其他人的代碼中可能會出現的問題。
對於記錄, equals
和compareTo
是equals
的協定在compareTo
返回0
時返回true
, 反之亦然 。 您的觀察(如果正確)違反了此規定。 但這是一個很大的“如果”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.