源码学习 Java.lang.String.compareTo()

本文深入解析了Java中String类的compareTo()方法工作原理,包括如何比较字符串的字典顺序,以及在不同情况下返回值的含义。通过具体示例说明了如何使用此方法进行字符串比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

compareTo(),是String类常用的方法,一开始博主以为是比较两个字符串转为整数类型的大小关系,后来发现并不是这样,其真正用法为:

如传入的参数字符串等于当前字符串,则返回值为 0
如当前字符串按字典顺序小于字符串参数,则值小于 0
如当前字符串按字典顺序大于字符串参数,则值大于 0
注:参数字符串,为传入的字符串

所以,其实并不是比较整数的大小,我们可以看一下其源码:

    public int compareTo(String anotherString) {
    	// 获取当前字符串长度 len1,与传入字符串长度 len2
        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;
        // 循环,判断两个字符串每一位的 ASCII码大小
        while (k < lim) {
            char c1 = v1[k];
            char c2 = v2[k];
            // 两字符串从左往右对比,在该位不同,
            // 则通过 ASCII码比较,判断两字符串按字典排序的位子
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        // 两字符串有相同的前缀,则通过判断长度来判断两字符串按字典排序的位置
        return len1 - len2;
    }

举例:

        String a = "abcd";
        String a1 = "abc";
        String a2 = "bc";

        System.out.println(a.compareTo(a1));
        System.out.println(a.compareTo(a2));

执行代码结果:
在这里插入图片描述
a串跟a1串前半部分相同,但长度比b串长,因此返回值大于零
a串跟a2串在第一个不同的位上,a串为 ‘a’,a2串为 ‘b’,'a’的ASCII码小于 ‘b’,因为返回值为负数

而对于比较整数型的大小,就只能借助 Integer.parseInt();进行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值