本文共 1143 字,大约阅读时间需要 3 分钟。
前几天在写基类,其中一个方法是去除字符串中的所有空格,代码如下
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次的话,二者的效率差别是很大的
转载地址:http://fqskb.baihongyu.com/