读书人

读String源代码札记

发布时间: 2012-09-23 10:28:10 作者: rapoo

读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 包下面的类来完成的。

读书人网 >编程

热点推荐