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

Java String_第1张图片
此外,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)){}

Java String_第2张图片

被问到了String.intern()方法
存在于.class文件中的常量池,在运行期被JVM装载,并且可以扩充。String的intern()方法就是扩充常量池的一个方法;当一个String实例str调用intern()方法时,Java查找常量池中是否有相同Unicode的字符串常量,如果有,则返回其的引用,如果没有,则在常量池中增加一个Unicode等于str的字符串并返回它的引用

你可能感兴趣的:(Java String)