zoukankan      html  css  js  c++  java
  • String、StringBuilder、StringBuffer

    http://www.cnblogs.com/dolphin0520/p/3778589.html

    附上同行写的博客,写的不错

    我学习了,总结如下:

    1.查看源码

    private final char value[],发现字符串中每一个字符实际上是以数组的形式保存着的
    查看concat,replace等很多方法,返回结果都是return new String(xxx),都是重新生成新的字符串对象,而不是在原字符串上操作

    记住对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象

    2.博主反编译字节码文件,这个不会

    String string = "";
    for(int i=0;i<10000;i++){
    string += "hello";
    }
    这段代码如果直接执行实际上产生了1000个String对象
    但在运行中实际上jvm使用StringBuilder去优化

    StringBuilder str = new StringBuilder(string);

    str.append("xxx");

    str.toString();

    首先生成StringBuilder对象,用StringBuilder对象去操作(append),然后将StringBuilder转换为String

    这样同样会产生1000个对象

    这样有优化效果吗,我测试了一下是能优化的,速度快的时候能提高一倍

    3.下面介绍StringBuilder与StringBuffer

    上面的操作如果使用StringBuilder:

    StringBuilder stringBuilder = new StringBuilder();
    for(int i=0;i<10000;i++){
    stringBuilder.append("hello");
    }

    则只会产生一个stringBuilder 对象,也就是说在用stringBuilder 操作时候,不会产生新的对象,这样大大提升了速度
    所以,如果字符串的相加操作或者改动操作过多的话,就使用stringBuilder
    StringBuffer是干什么的呢?

    看源码,发现几乎是一样的,就是在成员方法上多了synchronized,显然就表明它是线程安全的
    在多线程环境,使用StringBuffer

  • 相关阅读:
    客户端本地存储,web存储,localStorage
    js地理定位对象 navigator.geolocation
    使用defined和require引入js
    VUE的使用方法
    $.each()的用法
    jQuery的deferred对象详解
    jquery 中prop()的使用方法
    IE7下对某些seajs压缩文件不兼容的解决方法
    饼状图注释
    $.grep()的用法
  • 原文地址:https://www.cnblogs.com/jaro/p/9007420.html
Copyright © 2011-2022 走看看