一、StringBuffer:

1. 是可变长的,内容可以直接增删,是一个容器,存放字符数组的位置在父类AbstructStringBuilder的char[] value中,与String不同,该数组不是final的,是存放在堆中的,如果想要继续添加字符,在不超过原本数组长度的情况下,可以直接追加。

而String每次更改都要重新创建对象,更改string变量指向的地址值,因为其字符数组保存的地址值是final不可更改的,所以每次只能重新创建string对象。

2. StringBuffer类是final的,不能被继承。

3. 构造器:

(1)new StringBuffer():默认传入16,16为value的默认大小

(2)new StringBuffer(int capacity):给定value的大小

(3)new StringBuffer(String str):底层调用 super(str.length()+16); append(str);

(4)new StringBuffer(CharSequence seq):传入字符序列,不常用

4. String和StringBuffer的互相转换:

(1)String——>StringBuffer:

(1.1)new StringBuffer(String str)

(1.2)StringBuffer sb = new StringBuffer(); sb.append(str);

(2)StringBuffer——>String:

(2.1)new String(stringbuffer);

(2.2)stringbuffer.toString();

5. 常用方法:

(1)append():里面可以传字符、字符串、数字、布尔等,都可以转为字符类型添加进去

(2)toString():底层是

if (toStringCache == null) {//这里的toStringCache是被transient修饰的不能被序列化的私有属性toStringCache = Arrays.copyOfRange(value, 0, count);//现将value复制
}
return new String(toStringCache, true);//重新new一个string对象

(3)delete(start,end):删除StringBuffer对象的 [start,end)的部分

(4)replace(start,end,str):将[start,end)部分替换为str

(5)indexOf(str):str在StringBuffer中的首次出现位置

(6)insert(index,str):在index位置插入str,原来该位置上的字符向后推移

(7)length()

6. 练习:

(1)底层调用父类的append方法

if (str == null)return appendNull();

其中

private AbstractStringBuilder appendNull() {int c = count;ensureCapacityInternal(c + 4);final char[] value = this.value;value[c++] = 'n';value[c++] = 'u';value[c++] = 'l';value[c++] = 'l';count = c;return this;
}

可以看出,添加的字符串是null的话,也会追加“null”

(2)会调用length(),因此会有空指针异常

public StringBuffer(String str) {super(str.length() + 16);append(str);
}

(3)简单应用insert:给小数点前面的数每三个一组加上“,”

public static void main(String[] args) {//给字符串加上逗号分隔其代表的数字String s = "31231.23";StringBuffer sb = new StringBuffer(s);for(int i = sb.lastIndexOf(".")-3;i>0;i-=3){//先往前挪三位再判断sb.insert(i,",");}sb.length();String str = null;sb.append(str);System.out.println(sb.toString());}

1. 两者的父类都是AbstructStringBuilder,二者的方法都是相同的,只是线程安全性不同。

二、StringBuilder:

1. 其与StringBuffer的区别是不是线程安全的,用在字符串缓冲区被单个线程使用的时候,因为他没有synchronize互斥

2. 在单线程情况下比StringBuffer快,是其一个简易替换

3. 其父类和StringBuffer一致,都是AbstructStringBuilder。

三、效率上 StringBuilder > StringBuffer > String

四、小结

StringBufferStringBuilder相关推荐

  1. string stringbuffer stringbuilder 区别

    共同点:String StringBufferStringBuilder 都是字符串相关函数,StringBuffer StringBuilder都是AbstractStringBuilder的子类 ...

  2. java字符串笔试题_五道Java常见笔试题及答案汇总

    1.String和StringBuffer的区别? 答:Java平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据.这个String类提供了数 ...

  3. java面试宝典(综合版)

    目录 目录............................................................................................... ...

  4. Java面试宝典之:基础篇

    一.   Java基础部分 1.Java多态的具体体现 [必背] 面向对象编程有四个特征:抽象,封装,继承,多态. 多态有四种体现形式: 1. 接口和接口的继承. 2. 类和类的继承. 3. 重载. ...

  5. 第五章 字符串 总结

    目录 5.1 String类 5.1.1 声明字符串 5.1.2 创建字符串 5.2 连接字符串 5.3 提取字符串信息 5.3.1  获取字符串长度 5.3.2 获取指定字符 5.3.3 获取子字符 ...

  6. 略少面试题 项目中用到的技术详解 有用

    二.74--\\ Springmvc和Struts的区别 Springmvc入口是方法 Struts 入口是 fiter Springmvc 基于方法开发的 传递参数通过形参,可以设计成单例或者多例 ...

  7. java 中常用的类(笔记 十六)

    目录 一. 字符串相关的类 1.创建字符串 2.String常用方法 3.StringBuffer StringBuffer类的常用方法 4.StringBuilder 二.JDK 8之前的日期时间A ...

  8. 剑指offer-数组\矩阵

    数组总结:双指针,有序二分,分治: 1.找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每 ...

  9. 二叉树4:二叉树的序列化和反序列化

    题目:首先我们介绍二叉树先序序列化的方式,假设序列化的结果字符串为str,初始时str等于空字符串.先序遍历二叉树,如果遇到空节点,就在str的末尾加上"#!","#&q ...

最新文章

  1. Web漏洞扫描(四:知识点及错误总结)
  2. LSGO代码小组第17周复盘日志
  3. VTK:Utilities之2DArray
  4. 算法数据结构(一)-B树
  5. milk and news paper(transfer)
  6. java懒加载注解_在springboot中实现个别bean懒加载的操作
  7. Windows服务器常用命令
  8. Python 基礎 - 變量
  9. eclipse 设置Java快捷键补全
  10. sql 查看某个日期字段对应某天的数据
  11. 中级微观经济学笔记整理
  12. go每日新闻(2021-04-01)——令牌桶的实现 rate/limt
  13. tipask二次开发总结_tipask二次开发总结.docx
  14. 分享一个统计 Android 模块构建时长的脚本工具
  15. 月份,星期几的英文表示
  16. 万字文肝Java基础知识(一)
  17. 跨境专线物流都有哪些专线
  18. RGB24 To Yuv420 C语言实现
  19. 基于html2canvas实现网页保存为图片及图片清晰度优化
  20. 2017. 圆周排列

热门文章

  1. 《GOF设计模式》—命令(COMMAND)—Delphi源码示例:文档编辑
  2. EnterCriticalSection
  3. C - Cocoa Coalition
  4. java排查死锁_Java死锁的排查和解决方案
  5. html网页制作一个人多久,一个人,一个站,我的真实感受
  6. python的偏函数
  7. 【discuzx2】space_album_list.htm
  8. excel的简单使用2-dfgs
  9. 爬虫Scrapy框架初体验
  10. 2020上半年总结及感悟