- 2
- 0
- 约4.11千字
- 约 4页
- 2017-11-20 发布于北京
- 举报
JavaString与StringBuffer用法区别
Java String 与 StringBuffer 用法区别
转载 String类用来表示那些创建后就不会再改变的字符串,它是immutable的。而StringBuffer类用来表示内容可变的字符串,并提供了修改底层字符串的方法。 --当我们进行字符拼接时,请使用StringBuffer类而非String类,因为前者将比后者快上百倍。 的确,在程序的太多场合我们都会进行字符串拼接工作,简单的代码示例如下: String str=You are nice.; str+=I love you so much.; 如果用StringBuffer类的话,代码如下: StringBuffer str= new StringBuffer(You are nice.); str.append(I love you so much.); 从表面看来String类只用一个加号(+)便完成了字符串的拼接,而StringBuffer类却要调用一个append()方法,是否实现起来更简洁,更单纯呢?其实不然,让我们了解一下程序运行内部发生了哪些事情: 经编译后程序的bytecode(字节码)展示出了实质: 在用String类对象直接拼接时,JVM会创建一个临时的StringBuffer类对象,并调用其append()方法完成字符串的拼接,这是因为String类是不可变的,拼接操作不得不使用StringBuffer类(并且--JVM会将You are nice.和I love you so much.创建为两个新的String对象)。之后,再将这个临时StringBuffer对象转型为一个String,代价不菲!可见,在这一个简单的一次拼接过程中,我们让程序创建了四个对象:两个待拼接的String,一个临时StringBuffer,和最后将StringBuffer转型成为的String--它当然不是最初的str了,这个引用的名称没变,但它指向了新的String对象。 而如果直接使用StringBuffer类,程序将只产生两个对象:最初的StringBuffer和拼接时的String(I love you so much.),也不再需要创建临时的StringBuffer类对象而后还得将其转换回String对象。 可以想象,当我们的字符串要被循环拼接若干段时,用String类直接操作会带来多少额外的系统开销,生成多少无用的临时StringBuffer对象,并处理多少次无谓的强制类型转换哪。 String 类 ??? String 类提供了几种字符串创建方法。 ??? String s = abcd 使用字符串常量自动创建String实例。 ??? String s = new String(String s)通过String 对象或字符串常量传递给构造方法。 ??? public String (char value[],int offset, int count)将字符数组一部分赋给String 构造方法,offset 为起始下表, count 为数组长度。 ??? String 类提供了丰富的字符串操作方法,其中重要的例举如下。 ??? public int lenght() 返回字符串的长度。 ??? public char charAt(int index) 返回字符串位置index处的字符。 ??? public boolean equals(Object o) 比较两个字符串对象,相等则返回true;反之返回false。 ??? public int compareTo(String s) 比较两个字符串字典顺序,相等返回0,s大于当前字符串返回一个负值,s小于当前串返回一个正值。 ??? public boolean regionMatches(int toffset,String other,int ooffset,int len)从当前字符串位置toffset开始寻找字符串other中起始位置为ooffset 长度为len 的子串。如发现匹配,返回true; 否则,返回false。 ??? public boolean startsWith(String prefix) 从当前字符串的起始位置开始寻找字符串 prefix。如发现匹配,返回true;否则,返回false。 ??? public boolean endsWith(String suffix) 如当前字符串的结尾子串与 suffix 匹配,返回true;否则,返回false。 ??? public int indexOf(String str) 在当前字符串中寻找与str匹配的子串,返回首
原创力文档

文档评论(0)