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;

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

上述为JDK源码。

value是一个常量字符数组,在类中定义是: 

private final char value[];

由源码分析可知,len1是源字符串的长度,len2是参数字符串常数。lim为两个字符串的最小长度。

while语句中,从第一个字符开始,将源字符串第n个字符和参数字符串第n个字符,依次递增比较(条件为:在较短字符串长度内),比较过程中,若两字符串相同位置字符不相等,直接返回进行比较的两字符的ASCII码的差值,若字符相等,字符位置递增再进行比较,直到两字符串有不同的字符出现,或者较短字符串全部字符已比较完毕。

若较短字符串为较长字符串的前缀,则返回两者之间的长度差。

注意:此处值得一提的是return关键字,当执行到while语句中的return语句时,跳出循环且后面的语句不会继续执行,函数结束得到返回值。

1、不同字符在较短字符串长度之内时

返回值=原字符串与参数字符串中第一个不同字符相差的ASCII码值,为原减参。

例子如下:

String str1="javasdrip";

String str2="javdscript";

str1.compareTo(str2);

此时返回值为-3,是a的ASCII码(97)减去了d的ASCII码值(100)得到。

扫描二维码关注公众号,回复: 4410912 查看本文章

注意:只比较第一个不同的字符,后面的d和c也不一样但不会进行比较了。

2、不同字符在较短字符串长度之外时

返回值=原字符串与参数字符串相差的字符个数,原字符串长度大时为正,反之为负。

例子如下:

String str1="java";

String str2="javascript";

str1.compareTo(str2);

此时返回值为-6,是str1相比str2少去的字符个数。

注意:此时只比较位数,而无关ASCII码值,并非是0的ASCII码值减去s的ASCII码值,在参数字符串前面字符和原字符串一样时,返回值就是两者相差的字符个数,即使改变后面的字符也不会影响到返回的值,比如String str2="java123$%^",此时结果仍是-6。

以下为练习巩固:

返回值:

返回值是整型,它是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符串或被比较的字符串有一方到最后一个字符。

  • 如果参数字符串等于此字符串,则返回值 0
  • 如果此字符串长度小于字符串参数,则返回一个小于 0 的值
  • 如果此字符串长度大于字符串参数,则返回一个大于 0 的值

印证1: 

public class Test {
    public static void main(String args[]) {
        String str1 = "Strings";

        String str2 = "Strings";

        String str3 = "Strings123";
 
        int result = str1.compareTo( str2 );
        System.out.println(result);
      
        result = str2.compareTo( str3 );
        System.out.println(result);
     
        result = str3.compareTo( str1 );
        System.out.println(result);
    }
}

以上程序执行结果为:

0
-3
3

印证2: 

String str1="abcde";

String str2="abdde";

str1.compareTo(str2);

这时的返回值是-1,即是c的ASCII码(99)减去了d的ASCII码(100)所得。

猜你喜欢

转载自blog.csdn.net/qq_21867719/article/details/81474694