Java学习笔记4——StringBuffer和StringBuilder
来源:互联网 发布:中国航信网络面试 编辑:程序博客网 时间:2024/06/06 07:37
一、StringBuffer
StringBuffer是final修饰的类,但它存放的内容是可以改变的。
StringBuffer是线程安全的。
public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharSequence{...}
1、构造方法:
(1)默认的无参构造方法:public StringBuffer()
创建一个StringBuffer对象,默认大小为16。
StringBuffer sb = new StringBuffer();
//构造方法public StringBuffer() { super(16);}
(2)以容量大小(整型)为参数的构造方法:public StringBuffer(int capacity)
创建指定大小的StringBuffer对象。
StringBuffer sb = new StringBuffer(100);
public StringBuffer(int capacity) { super(capacity);}
(3)以字符串为参数的构造方法:public StringBuffer(String str)
创建一个存在指定字符串的StringBuffer对象。
StringBuffer sb = new StringBuffer("Hello world!");
public StringBuffer(String str) { super(str.length() + 16); append(str);}
(4)以CharSequence为参数的构造函数:public StringBuffer(CharSequence seq)
创建一个存在指定字符序列的StringBuffer对象。
CharSequence c = "Hello world!";StringBuffer sb = new StringBuffer(c);
此方法是调用了(2)的构造方法。
public StringBuffer(CharSequence seq) { this(seq.length() + 16); append(seq);}
简单说一下,CharSequence与String都能用于定义字符串,但CharSequence的值是可读可写序列,而String的值是只读序列。
//父类的构造方法AbstractStringBuilder(int capacity) { value = new char[capacity];}
因为StringBuffer继承了AbstractStringBuffer,其构造方法均是直接或间接调用父类的构造方法。
2、成员方法
A、StringBuffer支持的方法
(1)将指定的字符串追加到此字符序列:public synchronized StringBuffer append(String str)
(2)将此字符序列用其反转形式取代:public StringBuffer reverse()
(3)移除此序列的子字符串中的字符:public delete(int start, int end)
(4)将 int 参数的字符串表示形式插入此序列中:public insert(int offset, int i)
(5)使用给定 String 中的字符替换此序列的子字符串中的字符replace(int start, int end, String str)
例子:
public class StringDemo { public static void main(String[] args) { String s1 = "world"; StringBuffer sb = new StringBuffer(); sb.append("Hello"); sb.append(s1); System.out.println(sb.toString()); System.out.println("-------------------"); sb.reverse(); System.out.println(sb.toString()); System.out.println("-------------------"); sb.insert(5," "); System.out.println(sb.toString()); System.out.println("-------------------"); sb.delete(1, 3); System.out.println(sb.toString()); System.out.println("-------------------"); sb.replace(1, 3, "666"); System.out.println(sb.toString()); System.out.println("-------------------"); } }
B、与String类似的方法
(1)获取StringBuffer字符的长度:public synchronized int length()
(2)获取当前容量:public synchronized int capacity()
(3)确保容量至少等于指定的最小值:public synchronized void ensureCapacity(int minimumCapacity)
(4)调整当前容量大小:public synchronized void setLength(int newLength)
(5)获取此序列中指定位置处的 char 值:public synchronized char charAt(int index)
包括了String类的很多方法,在StringBuffer中也可以使用。此处不再举例表述。
因为StringBuffer中的方法几乎都是被synchronized修饰,所以StringBuffer可以保证线程安全。
二、StringBuilder
StringBuilder 类是在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。其他成员方法等等都是类似的。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder类。然而在应用程序要求线程安全的情况下,则必须使用StringBuffer类。
三、String、StringBuffer、StringBuilder的区别
String属于字符串常量,StringBuffer和StringBuilder属于字符串变量。
String在修改时,是重新创建了一个String对象,然后再把引用指向新的对象。
而StringBuffer和StringBuilder都是在原对象上进行字符串拼接操作。一般情况下推荐使用StringBuilder。
从执行速度方面来说,StringBuilder>StringBuffer>String
在大部分情况下 StringBuilder > StringBuffer> String,当涉及多线程的情况时,则选用StringBuffer。
StringBuilder速度快,但是线程不安全。
StringBuffer速度慢,但是线程安全。
回顾了一下StringBuffer和StringBuilder,大致对这两个类有了一定的了解。
- Java学习笔记4——StringBuffer和StringBuilder
- JAVA学习笔记——StringBuffer和StringBuilder类
- 【Java学习笔记】String、StringBuffer和StringBuilder
- 黑马程序员 java学习笔记——String类(包含StringBuffer和StringBuilder)
- Java学习——StringBuffer和StringBuilder类
- Java学习笔记之String、StringBuffer和StringBuilder
- java学习笔记之String,StringBuilder和StringBuffer
- Java——StringBuffer和StringBuilder
- java——StringBuffer和StringBuilder类
- java基础知识—String、StringBuffer和StringBuilder
- java学习笔记-String,StringBuffer,StringBuilder浅析
- 【JAVA_SE学习笔记】String、StringBuffer和StringBuilder
- JAVA基础笔记之StringBuilder和StringBuffer
- 【Java学习】String、StringBuffer和StringBuilder
- Java学习之StringBuffer和StringBuilder
- Java学习之StringBuffer 和 StringBuilder 类
- JAVA学习笔记——字符串操作(String,StringBuffer,StringBuilder)
- 黑马程序员—Java基础学习笔记之String&&StringBuffer&&StringBuilder
- sourcetree在git中的使用
- 909422229_20多个常用的免费WebService接口
- (function($){...})(jQuery)是什么意思
- ajax接口通信跨域的处理(Java后台)
- 十三周 项目1(3)
- Java学习笔记4——StringBuffer和StringBuilder
- 关于mysql备份脚本与定时任务
- iOS 多线程
- 第15周项目2
- Storm-HBase集成--配置和开发
- 原来,在Linux系统也有快速格式化功能
- 第十周 项目 2
- 使用频率较高的7大seo作弊技术手法
- CGAffineTransform的疑惑探索