畫這章類圖真不容易,下一次可以考慮換一個軟件繪製類圖
花了老長時間看了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的字符串並返回它的引用