String源碼__jdk1.8源碼

來源:互聯網
上載者:User

String其實就是一個char集合

String只是大致看了下,基本都是對char數組的操作,包括判斷是否為空白,或者取指定下標資料等等。。

String類是final修飾的,所以不可被繼承,實現了java.io.Serializable, Comparable<String>, CharSequence等介面,說明String是可以序列化和還原序列化的,並且支援自訂的字串比較。

主要記錄下equals和hashCode兩個方法,這兩個方法都是重寫的Object類的。

Object類的equals方法其實使用的還是"=="

public boolean equals(Object obj) {
        return (this == obj);
    }

而hashCode不是用java寫的,就不多說了

下面是String重寫的

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

首先判斷對象地址是否相同,地址相同就直接返回true,地址不相同再判斷字串長度是否相同,最後再對字串的每個字元一一進行對比。

public int hashCode() {
        int h = hash;
        if (h == 0 && value.length > 0) {
            char val[] = value;


            for (int i = 0; i < value.length; i++) {
                h = 31 * h + val[i];
            }
            hash = h;
        }
        return h;
    }

雜湊的地址演算法主要就是h = 31 * h + val[i],每次是將上次一算出的hash值乘以31 然後再加上當前字元編碼值,由於這裡使用的是int肯定會有一個上限,當字串超過上限,HashCode的正確性就無法保證了,所以這點可以推斷出HashCode存在不相同字元擁有相同HashCode。

字串相同,雜湊一定相同,雜湊相同,字串不一定相同。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.