StringBuffer类和StringBuilder类
StringBuffer类和StringBuilder类
三者比较
String
- 不可变字符序列
- 底层用char[]存储
StringBuffer
- 可变的字符序列
- 线程安全的
- 效率低
- 底层结构使用char[]存储
- 扩容问题
- 如果要添加的底层数组盛不下,需要扩容底层的数组
- 默认情况下扩容为原来容量的2倍 + 2 ,同时将原有的数组元素复制到新的数组中
 
StringBuilder
- 可变的字符序列
- 线程不安全
- 效率高
- 源码分析
- 和StringBuffer源码一样,只是线程不安全了而已
 
三者效率比较
StringBuilder > StringBuffer > String
StringBuffer类
分析
- StringBuffer stringBuffer = new StringBuffer(); - 在底层创建了一个长度为16的数组: - char[] value = new char[16] 
- 添加数据后: - stringBuffer.append('a'); - 其底层为:value[0] = 'a';
 
 - 底层代码如图  
- StringBuffer stringBuffer = new StringBuffer("abc"); - 此时底层: - char[] value = new char["abc".length + 16] 
常用方法
- str1.append():用于字符串拼接
  
- str1.delete(start,end):删除指定位置的内容(被删除的内容左闭右开)
  
- str1.replace(start,end,str):把[start,end]位置替换成str(左闭右开)
  
- str1.insert(offset,b):在指定位置插入XXX(插入不是替换,只是位置后移)
  
- str1.reverse():当前字符串序列逆转
  
- str1.indexOf(str):返回str在当前字符串首次出现的位置
  
- str1.substring(start, end):返回从strat开始到end索引结束的左闭右开区间的子字符串
  
StringBuilder类
- 底层源码和StringBuffer源码一样,只是线程不安全了而已
- 常用的方法与StringBuffer相同,String一些方法也可以使用(可总结为增删改查插)
- 增 - append(XXX) 
- 删 - delect(int start,int end) 
- 改 - setCharAt(int n,char ch)--------修改一个字符 - replace(int start,int end,String str)-------修改换成一个新的字符串 
- 查 - charAt(int n) 
- 插 - insert(int offset,XXX) 
- 长度 - length 
 
StringBuilder(StringBuffer)与String之间的数据转换
StringBuilder/StringBuffer---->String转换
- toString()方法
  
- 通过String类中的构造将一个StringBuffer类转换为String类
  
String---->StringBuilder/StringBuffer转换
- 利用构造函数
  
- 调用append方法
  
StringBuffer类和StringBuilder类的更多相关文章
- StringBuffer类 和 StringBuilder类
		上一篇中讲解了String类的用法.那么String有什么特点呢? 字符串特点:字符串是常量,其值在创建后就不能被修改.字符串的内容一旦发生变化,就会创建一个新的对象. 代码验证字符串特点: publ ... 
- Java学习笔记20(String类应用、StringBuffer类、StringBuilder类)
		1.获取指定字符串中大小写和数字的个数: package demo; public class StringTest { public static void main(String[] args) ... 
- Java基础-StringBuffer类与StringBuilder类简介
		Java基础-StringBuffer类与StringBuilder类简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.StringBuffer类 在学习过String类之后 ... 
- 一大波Java来袭(四)String类、StringBuilder类、StringBuffer类对照
		本文主要介绍String类.StringBuffer类.StringBuilder类的差别 : 一.概述 (一)String 字符串常量.可是它具有不可变性,就是一旦创建,对它进行的不论什么改动操作 ... 
- string类和stringBuilder类
		字符串是C#中的一种重要数据类型,在项目开发中,离不开字符串操作.C#提供了string类实现字符串操作.于Convert类相似,string类中方法有静态方法和非静态方法.注意,在C#中String ... 
- java中String类、StringBuilder类和StringBuffer类详解
		本位转载自http://www.cnblogs.com/dolphin0520/p/3778589.html 版权声明如下: 作者:海子 出处:http://www.cnblogs.com/dolp ... 
- String类、StringBuilder类、StringBuffer类
		String类是不可变类,创建了一个String对象后,该String对象中的字符序列不能被改变. StringBuilder是字符序列可变的字符串类,提供了一系列修改字符串的方法. StringBu ... 
- java常用类与包装类--常用类字符串String类、StringBuffer类、Stringbuilder类
		1.String类 1.1String类的概念和储存结构: (1)字符串是一个比较特殊的对象,可以使用new,也可以不使用new来创建字符串对象 String s1 = new String(&quo ... 
- StringBuffer类、StringBuilder类详解
		StringBuffer是一个字符串缓冲区,是一个容器,而且长度可变,可以直接操作多个数据类型, 最终会通过toString()方法变成字符串. 容器的功能有: 1.存储 public StringB ... 
随机推荐
- 键盘侠Linux干货|  ELK(Elasticsearch + Logstash + Kibana) 搭建教程
			前言 Elasticsearch + Logstash + Kibana(ELK)是一套开源的日志管理方案,分析网站的访问情况时我们一般会借助 Google / 百度 / CNZZ 等方式嵌入 JS ... 
- 8、struct2解决中文乱码的方式
			首先建立一个jsp页面 列如 页面编码统一问题,这个最容易解决. <%@ page language="java" import="java.util.*" ... 
- VM363:1 Uncaught SyntaxError: Invalid or unexpected token
			此报错主要是因为json字符串转json对象时,json字符串中出现特殊字符(如:换行符)报错. json字符转json对象(如下写则报错) 更改后 参考地址: https://www.cnblogs ... 
- Python3-gevent模块-单线程下的"并发"-协程
			博客转载 http://www.cnblogs.com/alex3714/articles/5248247.html http://www.cnblogs.com/tkqasn/p/5705338.h ... 
- Zookeeper分布式过程协同技术 - 群首选举
			Zookeeper分布式过程协同技术 - 群首选举 群首概念 群首为集群中服务器选择出来的一个服务器,并被集群认可.设置群首目的在与对客户端所发起的状态变更请求进行排序,包括:create.setDa ... 
- 隐藏input的三种方法和区别
			一.<input type="hidden" />二.<input type="text" style="display:none& ... 
- cron表达式详解,cron表达式写法,cron表达式例子
			(cron = "* * * * * *") cron表达式格式:{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}例 "0 0 12 ? ... 
- 【树形dp】 bzoj1131  Sta
			题目 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. Output 输出你所找到的点 ... 
- 转载---最简单的JavaScript模板引擎
			转载自:http://www.cnblogs.com/dolphinX/p/3489269.html,http://blog.jobbole.com/56689/ 
- 简单的SQL语句学习
			CREATE DATABASE db_test; USE db_test; CREATE TABLE USER( uid INT PRIMARY KEY AUTO_INCREMENT, usernam ... 
