zoukankan      html  css  js  c++  java
  • Java:String、StringBuffer和StringBuilder的区别

      在公司实习期间,慢慢的体会到了作为一名开发人员,公司的Code convention是多么的重要。

    下面一条便是公司列举出来的。

    1. Rather than “String”, “StringBuffer” is recommended to be used to concatenate character strings. 

    Especially when a string is constructed by concatenating data in a loop, or when a string content is changed for numerous amount of times before it is returned/displayed, “StringBuffer” should be used. Sample code could be like:

                            StringBuffer stringBuffer = new StringBuffer();

                            for (int i=0; i<100; i++) {

                                stringBuffer.append("sample string");     

                            }

                            return stringBuffer.toString();

    大致意思是说,在连接字符串时,比起String,更推荐使用StringBuffer。尤其是当一个String在一个循环中用来连接数据的时候,或者在这个String返回之前它的内容需要频繁修改时,这时候就应该使用StringBuffer了。

    查了下网上的资料。加上别人的参考,下面是自己的总结部分。希望能帮到大家。

    1. String:它是不可变(immutable)的对象,对String对象进行改变的时候其实都等同于生成了一个新的String对象,然后将引用指向新的String对象,原String对象GC回收。

    2. StringBuffer 字符串变量(线程安全),适用于多线程程序中,保证同步性,如果要频繁对字符串内容进行修改,出于效率考虑最好使用StringBuffer,如果想转成String类型,可以调用StringBuffer的toString()方法。

    2.1 初始化: 

    StringBuffer s = new StringBuffer(“abc”);

    2.2 转换 : 需要注意的是,StringBuffer和String属于不同的类型,也不能直接进行强制类型转换,下面的代码都是错误的:

    StringBuffer s = “abc”; //赋值类型不匹配
    
    StringBuffer s = (StringBuffer)”abc”;    //不存在继承关系,无法进行强转

    2.3 StringBuffer对象和String对象之间的互转的代码如下:

    String s = “abc”;
    
    StringBuffer sb1 = new StringBuffer(“123”);
    
    StringBuffer sb2 = new StringBuffer(s);   //String转换为StringBuffer
    
    String s1 = sb1.toString();              //StringBuffer转换为String .toString()

    StringBuilder 字符串变量(非线程安全),适用于单线程程序中,不保证同步性。简要的说, String 类和 StringBuffer/StringBuilder 类的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类进行改变的   时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String  而如果是使用 StringBuffer/StringBuilder 类则结果就不一样了,每次结果都会对 StringBuffer/StringBuilder 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下推荐使用 StringBuffer/StringBuilder ,特别是字符串对象经常改变的情况下。

    用法:append,insert, remove,replace, delete

    StringBuffer sb = new StringBuffer(“TestString”);
    sb. delete (1,4);

    上面代码的作用是删除索引值1(包括)到索引值4(不包括)之间的所有字符,剩余的字符形成新的字符串。则对象sb的值是”TString”。

    两者的常用操作:append(), toString(), insert(), reverse(), delete()等。
    在大部分情况下 StringBuilder > StringBuffe 以为前者不需要考虑线程安全。

  • 相关阅读:
    跳出IFrame几种方式
    EChart使用简单介绍
    ckplayer视频播放插件使用
    uploadify文件批量上传
    纵表与横表互转实例(转)
    Sublime Text3使用记录
    异步上传,显示进度条
    JS手机浏览器判断(转)
    命令行创建maven模块工程
    eclipse创建maven模块工程
  • 原文地址:https://www.cnblogs.com/wmx-rj/p/4383080.html
Copyright © 2011-2022 走看看