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

  • 相关阅读:
    (转)eclipse使用技巧
    smartupload 上传文件时 把页面编码改成gbk 解决乱码
    引入外部js如何通知页面其编码格式
    OGNL表达式中的#、%和$
    javaweb提示框问题
    理解iOS 8中的Self Sizing Cells和Dynamic Type
    淘宝内部的兼容大屏幕iPhone设计流程
    ReactiveCocoa & MVVM 学习总结一
    ReactiveCocoa & MVVM 学习总结二
    Objective-C GCC Code Block Evaluation C Extension ({…})语法
  • 原文地址:https://www.cnblogs.com/jaro/p/9007420.html
Copyright © 2011-2022 走看看