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-20StringBuffer简介的更多相关文章

  1. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

  2. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  3. Cassandra简介

    在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...

  4. REST简介

    一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...

  5. Microservice架构模式简介

    在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...

  6. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  7. HTTPS简介

    一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...

  8. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  9. Cesium简介以及离线部署运行

    Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...

  10. 1.Hibernate简介

    1.框架简介: 定义:基于java语言开发的一套ORM框架: 优点:a.方便开发;           b.大大减少代码量;           c.性能稍高(不能与数据库高手相比,较一般数据库使用者 ...

随机推荐

  1. Visual Studio自动生成文件版本信息

    一.     前言 通常,要控制输出文件的版本信息,只需要手动修改资源rc文件中的Version,即可在输出文件的文件属性里查看到对应的版本信息.如下图:    但是,版本号是会随时都更新的,每次bu ...

  2. 设计模式学习笔记——Observer观察者模式

    观察者模式里面有两个东西:观察者(Observer)和目标(Subject).当目标发生变化的时候,观察者随之起舞,也作出相应的变化.此为观察者模式. 这是怎么做到的?主要是目标里面存有一份观察者的名 ...

  3. 百度新算法与网站SEO提升

  4. Hadoop_stack_cmd

    HDFS命令基本格式:Hadoop fs -cmd < args > HDFS命令基本格式:Hadoop fs -cmd < args > ls 命令 hadoop fs -l ...

  5. nodejs的request模块

    request模块让http请求变的更加简单.(作为客户端,去请求.抓取另一个网站的信息) request的GitHub主页: https://github.com/request/request 最 ...

  6. js获取三天后的日期

    js获取三天后的日期 setDate getNowAddTreeFormatDate() { var date = new Date(); date.setDate(date.getDate()+3) ...

  7. 提升自身的iOS编程水平 (转载)

    阅读博客 在现在这个碎片化阅读流行的年代,博客的风头早已被微博盖过.而我却坚持写作博客,并且大量地阅读同行的iOS开发博客.博客的文章长度通常在3000字左右,许多iOS开发知识都至少需要这样的篇幅才 ...

  8. hash与map的区别联系应用(转)

    一,hashtable原理: 哈希表又名散列表,其主要目的是用于解决数据的快速定位问题.考虑如下一个场景. 一列键值对数据,存储在一个table中,如何通过数据的关键字快速查找相应值呢?不要告诉我一个 ...

  9. maven实战(4)-- maven构建自己的jar到本地仓库中

    在平时的开发中,经常需要用到自己以前开发的一个jar包,那么如何使用将自己开发的jar提交到本地仓库中,供其他的项目依赖呢?主要有三种方法: (1)使用mvn的构建命令:mvn clean insta ...

  10. 实现自定义xib和storyboard的加载,

    一:加载xib 1.分别创建xib,.h  .m文件继承自UIView. 在xib上绑定类名. 或者创建文件的时候直接勾选xib 2.在控制器中调用类方法 jyq52787网盘/ios/潭州学院/iO ...