2013-05-01 97 views
-1

“XYZ” .compareTo( “ABC”)--->之间compareTo方法回差23为什么为字符串(ASCII)值

“ABC” .compareTo( “XYZ”)---> - 23

我需要知道它是如何计算这个数字value.what就是利用这个值的

回答

7

请看看源代码,并经过documentation它说比较两个字符串字典顺序 .The比较基于字符串中每个字符的Unicode值。

public int compareTo(String anotherString) { 
    int len1 = value.length; 
    int len2 = anotherString.value.length; 
    int lim = Math.min(len1, len2); 
    char v1[] = value; 
    char v2[] = anotherString.value; 

    int k = 0; 
    while (k < lim) { 
     char c1 = v1[k]; 
     char c2 = v2[k]; 
     if (c1 != c2) { 
      return c1 - c2; 
     } 
     k++; 
    } 
    return len1 - len2; 
} 

情况1:"xyz".compareTo("abc")

应返回'x'-'a'它等于23

情况2:"abc".compareTo("xyz")

应返回'a'-'x'其等于-23 。

+0

非常感谢你...... – user2338604 2013-05-02 01:35:41

+0

然后请[接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)答案。 – NINCOMPOOP 2013-05-02 05:44:01

3

数量级的数值是无关紧要的,一般不应该依赖。确切的值记录为String.compareTo,但我认为它本身就是一个设计错误。它不喜欢的差异可能在任何明智的方式使用,它限制了以后的实施可能仍服从Comparable但不同的细节:(合同(即String.hashCode被完全确定的事实是类似的错误。)

所有这对排序比较重要的是价值是否小于0,0,或大于0

Comparable.compareTo文档:

返回:
由于此对象小于,等于或大于指定对象,因此为负整数,零或正整数。

0

除了其他答案:如果您要执行本地sensitve字符串比较,而不是字典序(例如自然语言文本),然后看看CollatorCollationKey

0

的compareTo值仅参照结果 的符号+表示该大于该参数的xyz更大> ABC - 意味着该比参数ABC较小< XYZ 0意味着它们是平等的。

由于trings包含字符,字符串的compareTo使用字典顺序并将其转换为数字,但这只是实现。

0

“xyz”。compareTo(“abc”)---> 23

这是返回一个正整数所必需的。在这种情况下它返回 'X' - 'A',其是23.

“ABC” .compareTo( “XYZ”)---> - 23

这是必需的,以返回一个负整数。在这种情况下,它返回'a' - 'x',即-23。

同样

"abc".compareTo("abc")---> 0 

这是需要返回零。在这种情况下,它会返回'a' - 'a',它是零。

您可以看到使用减法是实施合同的最简单方法。

相关问题