源码分析篇之String源码分析三

    上期已经讨论了比较器的相关的问题。同时也提出问题明明父类已经实现了某个接口,子类为什么还是要实现同样的接口呢。这究竟有什么意义呢。通过使用度娘的多次探究之后最终我还是没有发现说它有什么特别的含义。我认为的最大的含义就是告诉使用者这个类实现了这样的一个接口。方便使用者进行调用。比如说如果父类实现了comparable比较器。那么试问,当你在使用它的子类的时候如果没有看到它实现comparable比较器。那么这个子类究竟能不能用collects.sort()进行排序呢。然而事实是子类也是可以进行排序的。那么加上comparable又会怎么样呢?子类并不需要进行重写。所以我认为子类与父类实现同一接口最大的意义就是让使用者用起来更加的直观,并没有什么其他的意义了。

    接下来将会对一些源码进行一波分析,基于自己已经学习过的一些知识。比如这里我们会经常遇到 == 与equals之间的区别问题,其实我们看源码的话就会发现这个问题其实很简单。

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

看了这段源码其实会发现 == 其实比较的是地址值。上面这段代码首先就会对地址值进行一次比较,然后呢才会对内容进行比较。对内容进行比较呢又是对内容的每个字符进行比较,只要有一个字符不相等就报错。这也就是底层实现equals方法的原理了。

接下来就是我们对于String中常用的方法了比如说lastIndexof(),indesof(),endwith()等等这些常用的方法了,我自己觉得这些都没什么可说的,大家如果真的对这个感兴趣就自己在开发的时候去看看吧。其实我觉得吧大家学习源码主要是学习那些特殊的东西,有特点的,特别的东西,所以像这些方法什么的我就不详细讲了,比如说继承和接口它究竟是怎么去实现的。设计模式它是怎么去使用的,它是怎么去实现我们那些底层的东西的,比如说ArrayList底层是数组,linkedList的底层是链表,这些东西究竟是怎么去实现的对吧。总之呢,我现在的理解就是这样。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值