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次的话,二者的效率差别是很大的
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次的话,二者的效率差别是很大的
相关文章推荐
- string 与 stringbuffer的性能比较
- String、StringBuffer、StringBuilder区分和性能比较
- Java String、StringBuffer、StringBuilder比较
- String, StringBuffer 和StringBuilder 执行时间上的比较
- StringBuffer与String的比较
- String,StringBuffer,StringBuilder性能比较,线程安全测试,源码解析。
- String、StringBuffer与StringBuilder比较
- 汇编语言: 试编写一段程序,要求比较两个字符串 string1 和 string2 所含字符是否相等,如相 等则显示“MATCH”, 若不相同则显示“NO MATCH”。
- String,StringBuffer和StringBuilder比较
- String,StringBuffer和StringBulider的比较
- Java基础回顾_String_StringBuffer_StringBuider性能比较
- Android中String、StringBuffer与StringBuilder的比较
- String, StringBuffer, StringBuilder拼接字符串的执行效率比较
- String 与 StringBuffer效率比较
- 再传一点今天的开发日志上来,主要是String和StringBuffer效率问题比较
- 比较String、StringBuffer与StringBuilder
- Java基础学习总结(65)——Java中的String,StringBuilder和StringBuffer比较
- 编写一段程序,从标准输入读取string对象的序列直到连续出现两个相同的单词或者所有单词都读完为止。使用while循环一次读取一个单词,当一个单词连续出现两次是使用break语句终止循环。输出连续重复出现的单词,或者输出一个消息说明没有人任何单词是重复出现的。
- String | StringBuffer | StringBuilder 比较