Java String

畫這章類圖真不容易,下一次可以考慮換一個軟件繪製類圖
這裏寫圖片描述
花了老長時間看了String類的源碼,不得不說源碼之下,無處可藏,不少的細節和不看源碼這輩子都不可能知道的。比如說java.lang.String#regionMatches(boolean, int, java.lang.String, int, int)這裏,笑死我了。原來超級大佬們也會有非常無奈的時候,咋辦呢?多加一個if唄。

// Unfortunately, conversion to uppercase does not work properly
// for the Georgian alphabet, which has strange rules about case
// conversion.  So we need to make one last check before
// exiting.
if (Character.toLowerCase(u1) == Character.toLowerCase(u2)) {
    continue;
}

這裏寫圖片描述
此外,String中對於多語言的處理,的確讓我比較暈。
還有感受一下被if支配的恐懼,java.lang.String#split(java.lang.String, int)

        if (((regex.value.length == 1 &&
             ".$|()[{^?*+\\".indexOf(ch = regex.charAt(0)) == -1) ||
             (regex.length() == 2 &&
              regex.charAt(0) == '\\' &&
              (((ch = regex.charAt(1))-'0')|('9'-ch)) < 0 &&
              ((ch-'a')|('z'-ch)) < 0 &&
              ((ch-'A')|('Z'-ch)) < 0)) &&
            (ch < Character.MIN_HIGH_SURROGATE ||
             ch > Character.MAX_LOW_SURROGATE)){}

這裏寫圖片描述

被問到了String.intern()方法
存在於.class文件中的常量池,在運行期被JVM裝載,並且可以擴充。String的intern()方法就是擴充常量池的一個方法;當一個String實例str調用intern()方法時,Java查找常量池中是否有相同Unicode的字符串常量,如果有,則返回其的引用,如果沒有,則在常量池中增加一個Unicode等於str的字符串並返回它的引用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章