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());
} }

测试结果,如下:

Java基础知识强化36:StringBuffer类之StringBuffer的概述的更多相关文章

  1. Java基础知识强化09:String、StringBuffer和StringBuilder使用

    1. 对于三者使用的总结: (1).如果要操作少量的数据用 = String               (2).单线程操作字符串缓冲区下操作大量数据 = StringBuilder (3).多线程操 ...

  2. Java基础知识强化之集合框架笔记76:ConcurrentHashMap之 ConcurrentHashMap简介

    1. ConcurrentHashMap简介: ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和Hashtable功能相同但是线程安全的方法.Conc ...

  3. Java基础知识强化43:StringBuffer类之StringBuffer和String的相互转化

    1. String和StringBuffer的相互转换 思想是:A-----B的转换,我们把A转换为B,其实是为了使用B的功能:B-----A的转换,我们可能的结果是A类型,所以还要转换回来 2. 案 ...

  4. Java基础知识强化47:StringBuffer类之StringBuffer的三个面试题

    1. 面试题:String,StringBuffer,StringBuilder的区别 ? 答:String是字符串内容不可变的,而StringBuffer和StringBuilder是字符串内容长度 ...

  5. Java基础知识强化45:StringBuffer类之字符串反转的案例

    1. 案例演示: package cn.itcast_07; import java.util.Scanner; /* * 把字符串反转 */ public class StringBufferTes ...

  6. Java基础知识强化42:StringBuffer类之StringBuffer的截取功能

    1. StringBuffer的截取功能: public String subString(int Start): public String subString(int Start, int end ...

  7. Java基础知识强化40:StringBuffer类之StringBuffer的替换功能

    1. StringBuffer的替换功能: public  StringBuffer   replace(int  start,  int  end, String  str): 2. 案例演示: p ...

  8. Java基础知识强化39:StringBuffer类之StringBuffer的删除功能

    1. StringBuffer的删除功能: public StringBuffer  deleteCharAt(int index):删除指定位置的字符,并返回字符串缓冲区本身. public Str ...

  9. Java基础知识强化44:StringBuffer类之把数组拼接成指定格式的字符串的案例

    1. 先看案例代码如下: package cn.itcast_07; /* * 把数组拼接成一个字符串 */ public class StringBufferTest2 { public stati ...

随机推荐

  1. ImageView设置点击效果没有用?ImageView src的图片大小改变不了?

    ImageView设置点击效果没有用? 解决 1.ImageView xml里面必须clickable 和longClickable为true <ImageView android:layout ...

  2. java JNI 的实现(1)-又进一步加深对JVM实现的理解

    目录 概述 主要优点 主要缺点 JNI实现的简单例子 开发工具 简略步骤 1,在eclipse的 'java类' 中声明一个 'native方法'; 2,使用 'javah' 命令生成包含'nativ ...

  3. [转]在 SQL Server 2008 中新建用户登录并指定该用户的数据库

    提要:我在 SQL Server 中新建用户登录时,出现了三种错误,错误代码分别是 18456.15128.4064 -----------------------------------  正 文 ...

  4. wininet API调用,检测网络

    [DllImport("wininet")]        private extern static bool InternetGetConnectedState(out int ...

  5. Debian/Ubuntu手动编译安装MongoDB C++11驱动及驱动测试

    本文章仅限cnblogs网站内转载!请某网站自觉,遵纪守法,尊重原创! 系统环境情况: 最小化.无桌面环境 新安装的Debian 8 Server 版本操作系统虚拟机一台 手动编译安装MongoDB ...

  6. JS之对象数组遍历?

    一.js实现遍历对象 <script> ","destroy":"97%"}; var props = ""; for ...

  7. 图片输出onerror事件

    <img src=".<?php echo $img[0];?>" onerror="this.src='img/zanwu.jpg'" st ...

  8. powerpoint无法输入中文怎么办|ppt文本框无法输入中文解决办法

    powerpoint文本框无法输入中文的情况不知大家是否遇到过呢?反正小编是遇到过这样的情况的,简直是急煞人也!那么powerpoint无法输入中文时应该怎么办呢?本节内容中小编就为大家带来ppt文本 ...

  9. HashMap HashTable HashSet区别剖析

    HashMap.HashSet.HashTable之间的区别是Java程序员的一个常见面试题目,在此仅以此博客记录,并深入源代码进行分析: 在分析之前,先将其区别列于下面 1:HashSet底层采用的 ...

  10. cf D. Broken Monitor

    http://codeforces.com/contest/370/problem/D 题意:输入一张图,上面只有两个字符'w'和‘.’ ,如果可以用一个正方形把所有的‘w’围起来,所有的‘w’都在正 ...