“XYZ” .compareTo( “ABC”)--->之间compareTo方法回差23为什么为字符串(ASCII)值
“ABC” .compareTo( “XYZ”)---> - 23
我需要知道它是如何计算这个数字value.what就是利用这个值的
“XYZ” .compareTo( “ABC”)--->之间compareTo方法回差23为什么为字符串(ASCII)值
“ABC” .compareTo( “XYZ”)---> - 23
我需要知道它是如何计算这个数字value.what就是利用这个值的
请看看源代码,并经过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 。
数量级的数值是无关紧要的,一般不应该依赖。确切的值记录为String.compareTo
,但我认为它本身就是一个设计错误。它不喜欢的差异可能在任何明智的方式使用,它限制了以后的实施可能仍服从Comparable
但不同的细节:(合同(即String.hashCode
被完全确定的事实是类似的错误。)
所有这对排序比较重要的是价值是否小于0,0,或大于0
返回:
由于此对象小于,等于或大于指定对象,因此为负整数,零或正整数。
除了其他答案:如果您要执行本地sensitve字符串比较,而不是字典序(例如自然语言文本),然后看看Collator和CollationKey。
的compareTo值仅参照结果 的符号+表示该大于该参数的xyz更大> ABC - 意味着该比参数ABC较小< XYZ 0意味着它们是平等的。
由于trings包含字符,字符串的compareTo使用字典顺序并将其转换为数字,但这只是实现。
“xyz”。compareTo(“abc”)---> 23
这是返回一个正整数所必需的。在这种情况下它返回 'X' - 'A',其是23.
“ABC” .compareTo( “XYZ”)---> - 23
这是必需的,以返回一个负整数。在这种情况下,它返回'a' - 'x',即-23。
同样
"abc".compareTo("abc")---> 0
这是需要返回零。在这种情况下,它会返回'a' - 'a',它是零。
您可以看到使用减法是实施合同的最简单方法。
非常感谢你...... – user2338604 2013-05-02 01:35:41
然后请[接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)答案。 – NINCOMPOOP 2013-05-02 05:44:01