java中String类的compareTo方法学习记录
源码如下:
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;
//比较在最短长度内的字符是否相等,不等就返回两个字符的ascll差值,相等就返回字串长度的差值。
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}
由源码可以看出:
首先取出两个字符串的长度,比较较小的长度内,两者是否相等。
若不相等,则直接返回该位置字符的ASCII码相减后的值。
若各位置都相等,则将两个字符串长度的差值返回。
具体例子如下:
package com.zhuguozhu.p1;
/**
* StringCompareToTest(String 类compareTo方法的实现浅析)
* @author Gouzhu Zhu
* @date 2018/1/21
* @vesion 1.0
*
*/
public class StringCompareToTest {
public static void main(String[] args) {
System.out.println(compareTo("朱国"));
}
public static int compareTo(String str) {
String len1 = "朱国柱";
char[] strval1 = len1.toCharArray();
char[] strval2 = str.toCharArray();
//取最短的字串长度
int lim = Math.min(len1.length(), str.length());
int k = 0;
//比较两个字串在最短的字串长度内的是否相等,如果不等将返回字符的ascll差值。
while(k < lim) {
if (strval1[k] != strval2[k]) {
return strval1[k] - strval2[k];
}
k++;
}
//如果前面的最短字串长度范围内相等的话,就比较两个字串的长度差。
return len1.length()-str.length();
}
}