zoukankan      html  css  js  c++  java
  • Java基础知识强化36:StringBuffer类之StringBuffer的概述

    1. StringBuffer类概述:

    (1)String的缺陷:

    我们如果对字符串进行拼接操作,每次拼接,都会构造一个新的String对象,既耗时,又浪费空间。如下图:

    (2)StringBuffer弥补了String的缺陷

    为了改进这个问题,而StringBuffer就可以解决这个问题。

    StringBuffer如何解决这个问题呢?

    StringBuffe第一次开辟比默认字符串大16byte的空间,然后在这16个字节字节写入被拼接的串。
    如果空间不够,以现有空间*2+2的方式翻一倍扩充。

    StringBuffer开辟较大的空间,空间满时再放大一倍的空间
    比如存储"hello"5个字符,会开辟char t[10]
    前5个放"hello",后5个为拼接的字符。
    如果拼接" my world" 9个字符超过t[10]
    空间再翻倍,乘2变成t[20]
    用t[20]存储hello my world

     

    (3)StringBuffer的特点

    StringBuffer是线程安全的可变字符串

    StringBuffer是用于存储数据的容器,StringBuffer长度是可变的,StringBuffer可以存储不同类型数据,StringBuffer最终要转成String进行使用,可以对字符串进行修改

    2. StringBuffer 和 String的区别?

    答:前者长度和内容可变,后者不可变。

    如果使用前者做字符串拼接,不会浪费太多的资源。

    而且频繁使用字符串拼接时候,建议使用StringBuffer,StringBuffer效率比String高太多了。

    看看String和StringBuffer连接字符串的性能究竟有多少差别,如下:

    下面测试中String和StringBuffer都进行了10万次字符串拼接,谁强谁弱,我们拭目以待:

    package com.himi.test;
    
    public class TestDemo {
        public static void main(String[] args) {
            System.out.println("----String测试----");
            System.out.println("开始时间:" + System.currentTimeMillis());
            String str1 = "a";
            for (int i = 0; i < 100000; i++) {
                str1 += "b";
            }
            System.out.println("结束时间:" + System.currentTimeMillis());
            
            
            System.out.println("----StringBuffer测试----");
            System.out.println("开始时间:"+System.currentTimeMillis());  
            StringBuffer str2 = new StringBuffer("a");  
            for(int i=0;i<100000;i++){  
                str2.append("b");  
            }  
            System.out.println("结束时间:"+System.currentTimeMillis());  
        }
    
    }

    测试结果,如下:

  • 相关阅读:
    The Single Responsibility Principle
    MSComDlg.CommonDialogserver不能创建对象错误的解决
    Hadoop的HA机制(Zookeeper集群+Hadoop集群)配置记录
    linux怎样查看port被谁占用
    hadoop配置说明
    C#中的继承与多态还有接口
    MySQL DATE_FORMAT() 函数
    MySQL处理数据库和表的常用命令
    mysql 增加用户
    sql2008连接数据库问题
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4822031.html
Copyright © 2011-2022 走看看