读String源代码笔记
?
1,数字可以转换成其他的进制的字符串时,能够使用Integer.toString的静态方法。
例子
?
int value = 3;//2进制String binaryValue = Integer.toString(value, 2);System.out.println("二进制的 3:" + binaryValue);int value16 = 31;System.out.println("十六进制的23:" + Integer.toString(value16, 16));
?
?2 ,subString方法可能会造成内存泄露。比方说一个字符串,长度为100个char的字段A。然后subString,截出一个2个char的字段B。那么B的字段中的属性value还是会使一个100个char的数字。
当然,这还会影响split方法,
?
?
/** * 演示SubString泄漏内存 */@Testpublic void testSubStringLeak(){String subString = this.subString();/** * 在这里设断点。可以看到subString中的Value还是10个Char的数组 * value的值 * [a, b, c, d, e, f, g, h, i, g, h, m, n] */System.out.println(subString);}private String subString(){String origin = "abcdefghighmn";return origin.substring(0, 2);}?
?
3, 从代码实现上来说,String的实现是一个char的属性Value,offset是数组中的起始位置,然后count是数组中的截取。
?
4,??replace,subString等的方法,我们希望的结果是返回值,其调用方法的对象,本身并不改变。
?
String s = "java";String result = s.replace("j", "l");System.out.println("origin s:"+s);System.out.println("replaced result:"+result);
?
?
5,matches(Stringregex)
????? replaceFirst(String regex, Stringreplacement)
????? replaceAll(String regex, Stringreplacement)
????? replace(CharSequence target, CharSequencereplacement)
????? split(String regex, int limit)
????? split(String regex)
?????? 都是借用java.util.regex 包下面的类来完成的。