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

  • 相关阅读:
    SVN服务器使用和搭建
    jenkins以.war包安装配置教程
    Django数据库与程序交互
    工作中常用到的linux命令
    js获取元素属性
    Jenkins利用插件持续集成的思路及安装
    web前端面试第一次[javascript函数和方法的区别]
    web前端面试第一次[定时器]
    linux卸载mysql
    mysql启动错误:Starting MySQL... ERROR! The server quit without updating PID file (/data/mysql/mysql.pid).
  • 原文地址:https://www.cnblogs.com/jaro/p/9007420.html
Copyright © 2011-2022 走看看