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 ...
- 对于没有Command属性时,怎么来达到相同的效果
控件是第三方Telerik控件 CellEditEnded事件想写成Command{Binding CellEditEndedCommand} 这样的效果如下代码 需要引用 System.Wind ...
- IO流(随机流,数组内存流
File file1=new File("test1.txt"); RandomAccessFile in2=new RandomAccessFile(file1,"rw ...
- CSS中zoom:1的作用
兼容IE6.IE7.IE8浏览器,经常会遇到一些问题,可以使用zoom:1来解决,有如下作用:触发IE浏览器的haslayout解决ie下的浮动,margin重叠等一些问题.比如,本站使用DIV做一行 ...
- 正则-匹配获取url参数
1.根据指定参数名获取参数值 A页面向连接到B页面的url为: http://www.189dg.com/ajax/sms_query.ashx?action=smsdetail&sid=22 ...
- WordPress插件制作笔记(一)---First Plugins Demo
1->add_action HOOK简单说明: http://codex.wordpress.org/Plugin_API/Action_Reference (参考网址) //在后台页脚位置加 ...
- centos 下使用sublime
CentOS 之 Sublime text3 安装及配置(不支持中文输入) sublime text 的界面友好,自动补全功能也不错. (本来用vim+php_function.txt的形式进行补全的 ...
- 虚拟机显卡分配过高的警告(Insufficient video RAM)
最近机房挪机柜,网线拔拔插插,又在虚拟机上配置了网卡的各项设置,其中一个虚拟机的网站这两天经常无法访问, 于是关注了一下虚拟机的“事件”,发现另外一个跳转网站的警告: 于是去vmware的官网上找到了 ...
- 关于C51中“大小端存储”问题的详解
1. Little-Endian(小端存储),即将低字节的数据存储于低地址中,Big-Endian(大端存储)反之. 2. 小端存储称为Intel模式,大端存储称为Motorola模式. 3. C51 ...
- Thinking in C++: 第1章 为什么C++会成功
本文内容摘抄自C++经典书籍:<Thinking in C++> 操作概念:OOP程序像什么 我们已经知道,用C 语言编写的过程程序就是一些数据定义和函数调用.要理解这种程序的含义,程 ...