常见对象-String类的compareTo()方法的源码解析


package cn.itcast_06;

/*
 * 如果我们看到问题了,看怎么办呢?
 * 看源码。
 */
public class StringTest {
	public static void main(String[] args) {
		String s1 = "hello";
		String s2 = "hel";
		System.out.println(s1.compareTo(s2)); // 2
	}
}


private final char value[]; 底层:字符串会自动转换为一个字符数组。

String s1 = "hello";
String s2 = "hel";
System.out.println(s1.compareTo(s2)); // 2

public int compareTo(String anotherString) {
    //this -- s1 -- "hello"
    //anotherString -- s2 -- "hel"
    
    //将s1转成字符数组,获取字符数组的长度
    int len1 = value.length;                //this.value.length--s1.toCharArray().length--5
    //将s2转成字符数组,获取字符数组的长度
    int len2 = anotherString.value.length;  //s2.value.length -- s2.toCharArray().length--3
    
    int lim = Math.min(len1, len2);         //Math.min(5,3); -- lim=3;
    
    char v1[] = value;                      //s1.toCharArray()
    char v2[] = anotherString.value;
    
    //char v1[] = {'h','e','l','l','o'};
    //char v2[] = {'h','e','l'};

    int k = 0;
    while (k < lim) {
        char c1 = v1[k];                    //c1='h','e','l'
        char c2 = v2[k];                    //c2='h','e','l'
        if (c1 != c2) {
            return c1 - c2;
        }
        k++;
    }
    return len1 - len2;                    //5-3=2;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZHOU_VIP

您的鼓励将是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值