使用String类的compareTo方法比较规则详解
目http://www.devze.com录
- String类的compareTo方法比较规则
- 1、compareTo 源码
- 2、代码分析
- 总结
String类的compareTo方法比较规则
1、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; int k = 0; while (k < lim) { char c1 = v1[k]; www.devze.com char c2 = v2[k]; if (c1 != c2) { return c1 - c2; } k++; } return len1 - len2; }
private final char value[]; //String类使用char[]来保存字符串
2、代码分析
A、首先会将调用compareTo方法的 str1 的长度保存到 len1 中,然后str2将作为实参传入方法给到anotherString,并将anotherString长度保存到 len2 中,即:str2的长度。
B、然后调用 Math.min(l编程en1, len2) 方法,得到长度中的最小值,用于决定后续字符依次循环比较的次数。
C、让 v1 指向 str1 的 value数组,v2 指向 str2 的 value数组。
D、进入while循环进行单个字符依次循环比较,循环条件 k < lim,k 从 0 开始,因为数组下标从0开始,因此是小于 lim。
E、每次都将 v1 和 v2 中相同索引位置的字符取出来比较是否相同:
a、如果不相同:则直接结束compareTo方法的调用,直接返回两个字符的ascii码差值;
b、如果相同:则继续比较下一个字符:
- 1、如果找到了不同的字符,仍然返回ascii码差值;
- 2、如果在循环比较结束后,仍然没有找到不同的字符,即:str1 和 str2前半部分的字符相同,则直接返回两个字符串总长度android之差,即:len1 - len2(str1.length - str2.length)。
总结
以上为个人经验,希望能给大家一个参考,也希望大家编程客栈多多支持编程客栈(www.devze.com)。
精彩评论