String的一些小用法(二)

105 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

🍊作者简介:少年不想说话,努力长大

🍊往期回顾:String的一些小用法(一)

🍊近期目标:写完基础源码,点赞👍🏼、收藏⭐、留言📩

书接上文,我们说了String的部分方法,今天我们继续;

getBytes方法

首先说下getBytes方法,将字符串转为字节数组,现在的getBytes会将字符根据系统编码格式进行转换,如果取不到,那么就按照ISO-8859-1编码格式进行转换,这个我觉得这里就了解这么多就行了;

public byte[] getBytes() {
        return StringCoding.encode(value, 0, value.length);
    }

equals方法

对于equals方法那可就太常见了,但还是要精细讲下,equals的判断分两部分,一个是对象的判断,一个是值的判断,比如我定义了两个String;

String aq = "1234";
String mmn = "1234";

两个值是一样的,所以第二次的复制只是一个对象地址的赋值,而不是又创建了一个新的对象,对于这种情况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;
    }

对于equalsIgnoreCase忽略大小写的方法我们不单独说了;它在判断是否相同的时候和equals是类似的,只不过多了一个如果匹配不上会将两个字符转换为大写形式的,然后再进行比较;

compareTo方法

这里compareTo方法我看了一下,和上面的还是差不多的,首先对于两个字符串,取两者的最小长度进行循环,在循环过程中,如果任意的两个字符不一样则会判断两个字符的编码对应的数值,以此返回如果参数字符串等于该字符串,则值为 0;如果此字符串按字典顺序小于字符串参数,则值小于 0;如果此字符串按字典顺序大于字符串参数,则值大于 0,如果都比较完了还是没结果,则就比较长度了,长的为大;这段源码也可以瞅瞅的;

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;
    }

可以看到今天的方法都有共同点就是字符的判断,都有字符;侧面说明java和C的属性定义,只不过String对它进行了封装🥗🥗🥗;

结束结束,那就🛴🛴🛴

如果对你有所帮助

点个赞呗