当前位置:  编程技术>java_String和StringBuffer区别分析 iis7站长之家

JAVA中StringBuffer与String的区别解析

    来源: 互联网  发布时间:2014-11-03

    本文导语:  看到这个讲解的不错,所以转一下 在java中有3个类来负责字符的操作。 1.Character 是进行单个字符操作的, 2.String 对一串字符进行操作,不可变类。 3.StringBuffer 也是对一串字符进行操作,是可变类。 String:    是对象不是原始类...

看到这个讲解的不错,所以转一下

在java中有3个类来负责字符的操作。

1.Character 是进行单个字符操作的,

2.String 对一串字符进行操作,不可变类。

3.StringBuffer 也是对一串字符进行操作,是可变类。

String:
    是对象不是原始类型.
    为不可变对象,一旦被创建,就不能修改它的值.
    对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String 是final类,即不能被继承.

StringBuffer:
    是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
    它只能通过构造函数来建立,
    StringBuffer sb = new StringBuffer();
注意:不能通过赋值符号对它进行付值.
sb = "welcome to here!";//error
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer中赋值的时候可以通过它的append()方法.
sb.append("hello");

字符串连接操作中StringBuffer的效率要比String高:

String str = new String("welcome to ");
str += "here";
的处理步骤实际上是通过建立一个StringBuffer,然后调用append(),最后
再将StringBuffer toSting();
这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.

并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值.
这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的.

看看以下代码:
将26个英文字母重复加了5000次,

代码如下:

        String tempstr = "abcdefghijklmnopqrstuvwxyz";
        int times = 5000;
        long lstart1 = System.currentTimeMillis();
        String str = "";
        for (int i = 0; i < times; i++) {
            str += tempstr;
        }
        long lend1 = System.currentTimeMillis();
        long time = (lend1 - lstart1);
        System.out.println(time);

可惜我的计算机不是超级计算机,得到的结果每次不一定一样一般为 46687左右。
也就是46秒。
我们再看看以下代码
代码如下:

        String tempstr = "abcdefghijklmnopqrstuvwxyz";
        int times = 5000;
        long lstart2 = System.currentTimeMillis();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < times; i++) {
            sb.append(tempstr);
        }
        long lend2 = System.currentTimeMillis();
        long time2 = (lend2 - lstart2);
        System.out.println(time2);

得到的结果为 16 有时还是 0
所以结论很明显,StringBuffer 的速度几乎是String 上万倍。当然这个数据不是很准确。因为循环的次数在100000次的时候,差异更大。不信你试试

如果还是不能够明白:

1)String的联合+方法与StringBuff的append方法的区别:

String的+运算符在进行字符串运算时,首先将当前的字符串对象转换为StringBuff 类型,调用其append方法,最后再将生成的StringBuff 对象通过其toString 方法转换为String类型的字符串,所以其效率要低。

但是在可读性上,还是String的连接运算符要高。

2)StringBuff是线程安全的

String是线程是非安全的

3)String是不可以修改的字符串对象,而StringBuff是可以修改的。

代码如下:

public static boolean fileCopy(String srcStr, String destStr) {

File srcFile = null;

File destFile = null;

Reader reader = null;

Writer writer = null;

boolean flag = false;

try {

srcFile = new File(srcStr);

if (!srcFile.exists()) {

System.out.println(“源文件不存在”);

System.exit(0);

} else {

reader = new FileReader(srcFile);

}

destFile = new File(destStr);

writer = new FileWriter(destFile);

char[] buff = new char[1024];

int len;

String str = “”;

StringBuffer sbuff = new StringBuffer();

while ((len = reader.read(buff)) != -1) {

//        str += new String(buff, 0, len);

sbuff.append(new String(buff,0,len));

}

//      writer.write(str.toCharArray());

writer.write(sbuff.toString().toCharArray());

flag = true;

writer.flush();

reader.close();

writer.close();

} catch (IOException e) {

System.out.println(“文件拷贝异常:= ” + e.getMessage());

}

return flag;

}


    
 
 

您可能感兴趣的文章:

  • java命名空间java.lang类stringbuffer的类成员方法: stringbuffer定义及介绍
  • java_String和StringBuffer区别分析
  • java命名空间java.lang类stringbuffer的类成员方法: capacity定义及介绍
  • java stringbuffer的用法示例
  • java命名空间java.lang类stringbuffer的类成员方法: append定义及介绍
  • 全面解释java中StringBuilder、StringBuffer、String类之间的关系
  • java命名空间java.lang类stringbuffer的类成员方法: trimtosize定义及介绍
  • Java之String、StringBuffer、StringBuilder的区别分析
  • java命名空间java.lang类stringbuffer的类成员方法: appendcodepoint定义及介绍
  • java命名空间java.lang类stringbuffer的类成员方法: delete定义及介绍
  • java命名空间java.lang类stringbuffer的类成员方法: tostring定义及介绍
  • java命名空间java.lang类stringbuffer的类成员方法: reverse定义及介绍
  • java命名空间java.lang类stringbuffer的类成员方法: deletecharat定义及介绍
  • java命名空间java.lang类stringbuffer的类成员方法: ensurecapacity定义及介绍
  • java命名空间java.lang类stringbuffer的类成员方法: substring定义及介绍
  • java命名空间java.lang类stringbuffer的类成员方法: insert定义及介绍
  • java命名空间java.lang类stringbuffer的类成员方法: offsetbycodepoints定义及介绍
  • java命名空间java.lang类stringbuffer的类成员方法: replace定义及介绍
  • java命名空间java.lang类stringbuffer的类成员方法: setcharat定义及介绍
  • java命名空间java.lang类stringbuffer的类成员方法: codepointcount定义及介绍
  • java命名空间java.lang类stringbuffer的类成员方法: codepointat定义及介绍
  • java 公式解析 表达式解析 expression-analyzer
  • 请问各位:我用SUN公司的JAXP开发包解析XML文档,可不知道对XML解析后如何将结果写回文件中。请各位熟悉Java和XML的高手帮忙。
  • java解析xml之jdom解析xml示例分享
  • Java 的解析器代码生成器 AustenX
  • Java的HTML解析器 Jerry
  • java解析xml之dom4j解析xml示例分享
  • java解析xml之dom解析xml示例分享
  • Java的CSV解析包 CSVBeans
  • Java的CSV解析包 CSVObjects
  • 求教JAVA中XML解析问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.lang类string的类成员方法: string定义及介绍
  • java中int, double 转化成String, String转化成double,怎么做?请给个例子.
  • java命名空间javax.xml.xpath类xpathconstants成员方法: string定义参考
  • java的String类用法
  • java命名空间javax.management.openmbean类simpletype<t>的类成员方法: string定义及介绍
  • 请问java.sql包中 preparedStatement 对象的setString(int parameterIndex,java.lang.String x)方法怎么用?
  • java命名空间java.io接口objectstreamconstants的类成员方法: tc_string定义及介绍
  • 汉字的问题:我用纯java把汉字从库里取出来显示,代码如下:String dbstr1= new String(ls.getBytes("ISO8859_1"),"gb2312"),可一部分字
  • java命名空间javax.xml.ws.handler接口messagecontext成员方法: query_string定义参考
  • java能否动态开辟string数组?
  • java命名空间java.lang类string的类成员方法: copyvalueof定义及介绍
  • 有关java中String类的方法的一个问题,急用!!!
  • java命名空间javax.imageio.metadata接口iiometadataformat的类成员方法: datatype_string定义及介绍
  • 那位高手能指教在java里string类如何转化成date型?
  • java命名空间java.lang类string的类成员方法: valueof定义及介绍
  • 请问有什么java共通类能在程序里将unicode转换成String对象?
  • java命名空间java.lang类string的类成员方法: tostring定义及介绍
  • 怎样把String转换成int?怎样获得系统时间并转换成java.sql.date类型?
  • java命名空间javax.print类docflavor.string的类成员方法: text_plain定义及介绍
  • java中的字符类型如何转换成String类型
  • java命名空间java.lang类string的类成员方法: tochararray定义及介绍
  • java 中String 最长可以多长a?
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3