StringBuffer是一个字符串缓冲区,如果需要频繁的对字符串进行拼接时,建议使用StringBuffer。

工作原理

StringBuffer的底层是char数组,如果没有明确设定,则系统会默认创建一个长度为16的char类型数组,在使用时如果数组容量不够了,则会通过数组的拷贝对数组进行扩容,所以在使用StringBuffer时最好预测并手动初始化长度,这样能够减少数组的拷贝,从而提高效率。

String与StringBuffer的区别?

String是不可变字符序列,存储在字符串常量池中

StringBuffer的底层是char数组,系统会对该数组进行扩容

package com.monkey1024.string;

public class StringBufferTest01 {

    public static void main(String[] args) {
//构造方法
StringBuffer sb1 = new StringBuffer();
//StringBuffer的初始容量
System.out.println(sb1.capacity()); //手动指定StringBuffer的长度
StringBuffer sb2 = new StringBuffer(100);
System.out.println(sb2.capacity()); StringBuffer sb3 = new StringBuffer("monkey");
System.out.println(sb3.capacity());//字符串的length + 16 } }

如何使用StringBuffer进行字符串拼接?

package com.monkey1024.string;

public class StringBufferTest02 {

    public static void main(String[] args) {
StringBuffer sb = new StringBuffer(30);
//调用append方法进行字符串拼接
sb.append("www");
sb.append(".");
sb.append("monkey1024");
sb.append(".");
sb.append("com");
System.out.println(sb);//自动调用其toString方法
//System.out.println(sb.toString());
sb.insert(4, "1024");//在指定位置插入字符串
System.out.println(sb);
sb.delete(4, 8);//删除指定位置的字符串
System.out.println(sb);
} }

String作为参数传递的问题

基本数据类型的值传递,不改变其值

引用数据类型的值传递,改变其值

String类虽然是引用数据类型,但是他当作参数传递时和基本数据类型是一样的

package com.monkey1024.string;

public class StringBufferTest03 {

    public static void main(String[] args) {
String s = "String";
System.out.println(s);
change(s);
System.out.println(s);//值没有改变 System.out.println("---------------------");
StringBuffer sb = new StringBuffer();
sb.append("StringBuffer");
System.out.println(sb);
change(sb);
System.out.println(sb);
} public static void change(StringBuffer sb) {
sb.append("java");
} public static void change(String s) {
s += "java";
} }

StringBuilder和StringBuffer的区别

通过API可以看到StringBuilder和StringBuffer里面的方法是一样的,那他们有什么区别呢?

StringBuffer是jdk1.0版本中加入的,是线程安全的,效率低

StringBuilder是jdk5版本加入的,是线程不安全的,效率高

最新文章

  1. FusionCharts的使用方法(超详细)
  2. mysql导入导出
  3. UITableView详解(2)
  4. Threading Module源码概述(二)
  5. poj1026
  6. Activity中异步操作showDialog异常解决方法:判断Ay是否结束
  7. LINUX编程学习笔记(十四) 创建进程与 父子进程内存空间
  8. 【Web探索之旅】第二部分第一课:客户端语言
  9. Android SVG矢量资源的使用方法
  10. 前端MVC Vue2学习总结(七)——ES6与Module模块化、Vue-cli脚手架搭建、开发、发布项目与综合示例
  11. Dynamics CRM2015 Update1 新功能之表单增强功能
  12. js中三种弹出框
  13. HI3518EV200+AR0130开发板烧录uboot、kernel、rootfs及其参数配置
  14. servlet是线程安全的么
  15. BZOJ1095 [ZJOI2007]Hide 捉迷藏 动态点分治 堆
  16. 萌新接触前端的第三课——JavaScript
  17. JS滑动到页面底部
  18. 解决MySQL报错:1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'informat
  19. 转-Vue.js2.0从入门到放弃---入门实例(一)
  20. 【转】Python OCR识别图片验证码

热门文章

  1. spring list map set
  2. bash的pushd和popd
  3. De Moivre–Laplace theorem 掷硬币
  4. __sizeof__()
  5. iOS UI控件之间的关系图
  6. java 获取路径
  7. LR工作原理
  8. WAS域名解析问题
  9. wukong引擎源码分析之搜索——docid有序的数组里二分归并求交集,如果用跳表的话,在插入索引时会更快
  10. VPS 安全措施(CentOS 6)