一、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. Linux安装Apache报错:Cannot find a valid baseurl for repo: base/7/x86_64解决方案
  2. Bootstrap基础二十七 多媒体对象(Media Object)
  3. nginx编译安装,nginx静态资源访问和负载均衡的使用!
  4. python3-day4(re正则表达式,冒泡)
  5. L1-044 稳赢 (15 分)—团体程序设计天梯赛
  6. [转]一个计算机专业学生几年的编程经验汇总
  7. Linux下nautilus的右键快捷菜单项设置
  8. 国二c语言编程题只看结果吗,全国计算机二级C语言上机考试运行和编译都可以,但是运行出的结果和题目要求的结果不一样...
  9. HS300股指与其成分股的价格匹配
  10. u盘数据丢失了怎么恢复?u盘数据恢复,2个方案完成
  11. Tbase 源码 (七)
  12. IT职业规划:大公司VS小公司,怎样选择更有前途?
  13. 三年的工作-软通动力
  14. java设计模式之工厂模式(UML类图分析+代码详解)
  15. karaf常用命令纪录
  16. 光栅尺位移传感器---莫尔条纹
  17. 网易运营微专业 目录
  18. 如何在JavaScript中删除字符串的第一个字符
  19. 彻底搞明白梯度下降算法1:方向导数与梯度概念理解
  20. 用计算机弹奏若当来世,狐妖小红娘的主题曲求若当来世完整版。

热门文章

  1. 5.Java常用API 1
  2. Image zImage uImage的关系
  3. 好用的手机记事本软件叫什么
  4. 【Linux端口大全】
  5. 路由器、猫(调制解调器)和交换机
  6. 全球及中国POCT行业发展现状分析,市场主要集中在经济发达地区「图」
  7. android面试题笔试题总结
  8. 这12首极短的诗歌,适合收藏
  9. 面向对象基础:OO的五大原则是指SRP、OCP、LSP、DIP、ISP
  10. viterbi算法通俗理解