前言:关于codepoint:https://www.jianshu.com/p/235ad9c63cf2
一 ,Character
1.为啥 这里要先变成字符数组?不直接把value传进去?
public String toString() {
char buf[] = {value};
return String.valueOf(buf);
}
2.Surrogate是什么?
详见回答:https://www.zhihu.com/question/42176549
3.这个方法不懂是什么意思
public static int offsetByCodePoints(char[] a, int start, int count,
int index, int codePointOffset) {
if (count > a.length-start || start < 0 || count < 0
|| index < start || index > start+count) {
throw new IndexOutOfBoundsException();
}
return offsetByCodePointsImpl(a, start, count, index, codePointOffset);
}
4.看不懂这个方法的作用,在网上搜到了一篇解释
地址:https://blog.csdn.net/asdfsadfasdfsa/article/details/78737656
public static char forDigit(int digit, int radix) {
if ((digit >= radix) || (digit < 0)) {
return '\0';
}
if ((radix < Character.MIN_RADIX) || (radix > Character.MAX_RADIX)) {
return '\0';
}
if (digit < 10) {
return (char)('0' + digit);
}
return (char)('a' - 10 + digit);
}
public static byte getDirectionality(char ch) {
return getDirectionality((int)ch);
}
5.Character里面有几个内部类,好像是用来存储特定字符集以及对特定字符集的一些方法?
二,String
1.CaseInsensitiveComparator的设计
详见:https://bbs.csdn.net/topics/391982434(最后一个回答可作参考)
2.Stringbuffer、Stringbuilder、String
public String(StringBuffer buffer) {
synchronized(buffer) {
this.value = Arrays.copyOf(buffer.getValue(), buffer.length());
}
}
从这里发现,它们的区别分别是,String为不可变的,而StringBuffer,Stringbuilder是可变的;而StringBuffer和builder的区别,在于Stringbuffer是线程安全的,builder则不是,但是由于去掉了锁的操作,故builder性能更好一些。
3.subString和subSequence
public CharSequence subSequence(int beginIndex, int endIndex) {
return this.substring(beginIndex, endIndex);
}
两个方法是一样的,JDK文档中写着是因为要实现CharSequence接口,故这个方法要放在这里。
5.join()方法底层是用Stringbuilder实现的。
6.toLowerCase()和toUperCase(),在codepoint层面上进行转换的,实现细节没看懂。
本文深入探讨了Java中的字符串处理技术,包括Character类的使用、Surrogate对Unicode字符的支持、String、StringBuffer与StringBuilder的区别,以及字符串操作方法如toLowerCase、toUpperCase、substring和subSequence的实现原理。

4146

被折叠的 条评论
为什么被折叠?



