博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
String和StringBuffer的比较(附带程序说明)
阅读量:2180 次
发布时间:2019-05-01

本文共 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/

你可能感兴趣的文章
按时间轴简述九大卷积神经网络
查看>>
详解循环神经网络(Recurrent Neural Network)
查看>>
为什么要用交叉验证
查看>>
用学习曲线 learning curve 来判别过拟合问题
查看>>
用验证曲线 validation curve 选择超参数
查看>>
用 Grid Search 对 SVM 进行调参
查看>>
用 Pipeline 将训练集参数重复应用到测试集
查看>>
PCA 的数学原理和可视化效果
查看>>
机器学习中常用评估指标汇总
查看>>
什么是 ROC AUC
查看>>
Bagging 简述
查看>>
详解 Stacking 的 python 实现
查看>>
简述极大似然估计
查看>>
用线性判别分析 LDA 降维
查看>>
用 Doc2Vec 得到文档/段落/句子的向量表达
查看>>
使聊天机器人具有个性
查看>>
使聊天机器人的对话更有营养
查看>>
一个 tflearn 情感分析小例子
查看>>
attention 机制入门
查看>>
手把手用 IntelliJ IDEA 和 SBT 创建 scala 项目
查看>>