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());
}
}
测试结果,如下:

Java基础知识强化36:StringBuffer类之StringBuffer的概述的更多相关文章
- Java基础知识强化09:String、StringBuffer和StringBuilder使用
1. 对于三者使用的总结: (1).如果要操作少量的数据用 = String (2).单线程操作字符串缓冲区下操作大量数据 = StringBuilder (3).多线程操 ...
- Java基础知识强化之集合框架笔记76:ConcurrentHashMap之 ConcurrentHashMap简介
1. ConcurrentHashMap简介: ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和Hashtable功能相同但是线程安全的方法.Conc ...
- Java基础知识强化43:StringBuffer类之StringBuffer和String的相互转化
1. String和StringBuffer的相互转换 思想是:A-----B的转换,我们把A转换为B,其实是为了使用B的功能:B-----A的转换,我们可能的结果是A类型,所以还要转换回来 2. 案 ...
- Java基础知识强化47:StringBuffer类之StringBuffer的三个面试题
1. 面试题:String,StringBuffer,StringBuilder的区别 ? 答:String是字符串内容不可变的,而StringBuffer和StringBuilder是字符串内容长度 ...
- Java基础知识强化45:StringBuffer类之字符串反转的案例
1. 案例演示: package cn.itcast_07; import java.util.Scanner; /* * 把字符串反转 */ public class StringBufferTes ...
- Java基础知识强化42:StringBuffer类之StringBuffer的截取功能
1. StringBuffer的截取功能: public String subString(int Start): public String subString(int Start, int end ...
- Java基础知识强化40:StringBuffer类之StringBuffer的替换功能
1. StringBuffer的替换功能: public StringBuffer replace(int start, int end, String str): 2. 案例演示: p ...
- Java基础知识强化39:StringBuffer类之StringBuffer的删除功能
1. StringBuffer的删除功能: public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回字符串缓冲区本身. public Str ...
- Java基础知识强化44:StringBuffer类之把数组拼接成指定格式的字符串的案例
1. 先看案例代码如下: package cn.itcast_07; /* * 把数组拼接成一个字符串 */ public class StringBufferTest2 { public stati ...
随机推荐
- 杂记之web篇
问题1:通过POST方式提交给后台的数据出现了乱码,用部分浏览器测试却是好的. 解决办法: 在web.config文件中加上 <globalization responseEncoding=&q ...
- 【JQuery学习笔记】一、基础篇
Lesson2 Ready 和onload类似,但onload只能注册一次,后注册的取代现注册的,而Ready可以多次注册都会执行 onload是所有院所创建完毕.图片.Css等都加载完毕后才触发,而 ...
- 总结:如何获取同一个DIV里的多个不同子标签的值,并赋值给input?
这个问题说起来简单,但对于新手来说,也着实卡了好久,并且我在网上搜了好久没能找到合适的答案, 于是去博问问了一下,得到许多大神们的帮助与回答,接下来我就总结一下能够实现这个效果的几种方法,既为了自己更 ...
- (六)Angularjs - 启动引导
自动引导 AngularJs 通过 ng-app 指令进行自动引导 手工引导启动框架 如果一个HTML文件中 有多个ng-app,AngularJS只会自动引导启动它找到的第一个ng-app应用,这是 ...
- 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。
#define MIN(A,B) ((A)<=(B)?(A):(B))
- Nuc900 bsp turbowriter使用注意点
Nuc900 bsp turbowriter使用注意点 一. Nor flash 用turbo 烧写kernel和文件系统时的注意点: 1. kernel的image No要大于rootfs 2.烧写 ...
- Sql Server索引(转载)
官方说法: 聚集索引 一种索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序. 聚集索引确定表中数据的物理顺序.聚集索引类似于电话簿,后者按姓氏排列数据.由于聚集索引规定数据在表中的物理存储顺序, ...
- PHP防止SQL注入的方法
[一.在服务器端配置] 安全,PHP代码编写是一方面,PHP的配置更是非常关键. 我们php手手工安装的,php的默认配置文件在 /usr/local/apache2/conf/php.ini,我们最 ...
- REDIS学习(1)环境搭建
1.下载 稳定版本的.tar.gz 包,解压到/usr/local/src/. 2 .cd 到文件夹下,不需要 configure 直接 make编译 ,成功之后,cd /usr/local/redi ...
- install pip3 for python 3.x
前言: 我目前使用的服务器为centos6.x 系统自带的python的版本为2.6.x,但是目前无论是学习还是使用python,python3都是首选,那么问题来了.---如何安装python3环境 ...