String类里的compareTo()方法~

先说结论:compareTo比较两个字符串是在第一个字符不相同的前提下,返回第一个字符的差值,如果第一个字符相同,就返回第二个字符的差值,以此类推。如果前n个字符都相等(n是比较小的那个字符串的长度),就返回两个字符串长度的差值。


把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];
            char c2 = v2[k];
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        return len1 - len2;
    }


一句一句分析:

(1)public int compareTo(String anotherString) {

compareTo()方法的返回值是int类型的,有一个String类型的参数取名叫anotherString。


(2)  int len1 = value.length;

         int len2 = anotherString.value.length;

定义了两个int型变量len1和len2,分别获取调用这个compareTo方法的字符串的长度和参数中传递的字符串的长度。这里的value就是字符串本身。

public String() {
        this.value = "".value;
    }

(3) int lim = Math.min(len1, len2);

定义了一个int型变量lim,他的值是len1和len2中的最小值,也就是两个字符串里比较短的字符串中字符的个数。

(4)    char v1[] = value;
         char v2[] = anotherString.value;

调用这个compareTo方法的字符串的每一个字符转换到字符型数组v1[]中,把参数中传递的字符串的每一个字符转换到字符型数组v2[]中。

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

这里一个while循环放在一起说了。定义一个int型变量k初始值为0,当k小于lim也就是小于(两个字符串中)比较小的字符串的长度时,执行while循环。(注意底部有个k++,也就是说这个while循环一共会执行lim次(分别是k=0一直到k=(lim-1)的时候))

接着将两个字符型数组中的第k个字符取出来,如果不相等的话,直接return他们的差值(char作为基本数据类型是可以相减的),这个差值是调用这个compareTo方法的字符串的第k个字符减去参数中传递的字符串的第k个字符差值。如果两个数组第k个字符相等的话,这次循环就只做一个k++。

(6)   return len1 - len2;

最后一句了,这句执行的条件是while循环中没有执行return语句,也就是说两个字符串前lim个字符每一个字符都相等。

在这个条件下,返回两个字符串长度的差值。如果长度相等就说明是同一个字符串了。



分析完代码可以清楚的看出结论啦~结论放在最开头了~




吐槽一下,csdn的排版真难受..我在考虑是不是转战其他博客了qvq



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值