您的位置:首页 > Web前端

String和StringBuffer的比较(附带程序说明)

2005-09-23 11:53 375 查看
前几天在写基类,其中一个方法是去除字符串中的所有空格,代码如下
public String trimAllStr(String str){
String result = "";
int i;
if (str == null || str.equals("")){
return result;
}
else{
result = str.trim();
result = (result.replaceAll(" ","")).replaceAll(" ","");
}
return result;
}
后来考虑String的特点,用Stringbuffer重新写过,代码如下
public String trimAllStr(String str){
String result = "";
int i;
if (str == null || str.equals("")){
return result;
}
else{
StringBuffer strbuf = new StringBuffer(str);
while (strbuf.length() > 0 && Character.isWhitespace(strbuf.charAt(0))) {
strbuf.deleteCharAt(0);
}
result = strbuf.toString();
}
return result;
}
String和StringBuffer的区别大家都知道:String对象被赋值后是不可改变的,StringBuffer正好相反.按照我的理解,在在第一段代码中:
result = str.trim();
result = (result.replaceAll(" ","")).replaceAll(" ","");
在上面两句中,result对象的值虽然最终改变了,但是在编译的时候过程是这样的,
1)String result = "";创建result对象,JVM为其分配内存地址,指向""
2)result = str.trim();JVM创造新的String对象实例str.trim(),并且内存地址指向它,原来分配的内存地址等待垃圾回收
3)result = (result.replaceAll(" ","")).replaceAll(" ","");同2),只不过经过了2次内存地址重新分配
而在第二段代码中,执行StringBuffer strbuf = new StringBuffer(str);后,只有一个对象-strbuf存在

上面举的例子还不足以说明StringBuffer的高效,因为字符串的改变次数不多,如果是N次的话,二者的效率差别是很大的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐