Java记录 -29- StringBuffer

StringBuffer

String是一个常量final的,创建了不能追加。因此大量使用String时会创建大量的对象,为了避免过多创建对象,有了StringBuffer,StringBuffer类似于String的字符串缓冲区,但能修改。

当多个字符串进行拼接时,只会产生一个StringBuffer对象。其重要方法append()返回其原有对象的引用,并可以将任何原生类型追加进去,并转换为字符串。

使用实例:

StringBuffer sb = new StringBuffer();

sb.append(“hello”).append(“ world”).append(“ welcome”).append(100).append(false).

String s = sb.toString();

java.lang.StringBuffer

public final class StringBuffer extends Object implements Serializable, CharSequence

线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。

可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。

StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。

例如,如果 z 引用一个当前内容为 "start" 的字符串缓冲区对象,则此方法调用 z.append("le") 会使字符串缓冲区包含 "startle",而 z.insert(4, "le") 将更改字符串缓冲区,使之包含 "starlet"。

通常,如果 sb 引用 StringBuilder 的一个实例,则 sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果。

当发生与源序列有关的操作(如源序列中的追加或插入操作)时,该类只在执行此操作的字符串缓冲区上而不是在源上实现同步。

每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。

时间: 2024-11-09 06:40:42

Java记录 -29- StringBuffer的相关文章

【Java】String,StringBuffer与StringBuilder的区别??

String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以

Java中的StringBuffer

Java中的StringBuffer /** * */ package com.you.model; /** * @author YouHaidong * */ public class StrFoo { /** * @param args */ public static void main(String[] args) { StringBuffer a = new StringBuffer("A"); StringBuffer b = new StringBuffer("

【Java记录】try-with-resources的一个坑

[Java记录]try-with-resources的一个坑 今天处理 AsynchronousFileChannel 时候的一个问题,代码如下: public static void main(String[] args) throws Exception { String filePath = "/home/xe/git/osc/JavaNote/Lang/data/Test.java"; ExecutorService executorService = Executors.ne

java基础知识回顾之---java StringBuilder与StringBuffer异同点

/*         * StringBuilder与StringBuffer异同点:         *          * 使用方法与StringBuffer完全一样         * StringBuilderjdk1.5以后出现的功能和StringBuffer一模一样的对象.         *          * StringBuilder与StringBuffer但是最大的区别在于:         *             StringBuffer是线程同步的.通常用于多线

java代码优化29个点

通过java代码规范来优化程序,优化内存使用情况,防止内存泄露 可供程序利用的资源(内存.CPU时间.网络带宽等)是有限的,优化的目的就是让程序用尽可能少的资源完成预定的任务.优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率.本文讨论的主要是如何提高代码的效率.在Java程序中,性能问题的大部分原因并不在于Java语言,而是在于程序本身.养成好的代码编写习惯非常重要,比如正确地.巧妙地运用java.lang.String类和java.util.Vector类,它能够显著地提高程序的性

java记录在线人数小案例

文件目录: web.xml: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLoc

Java String、StringBuffer和StringBuilder类

package com.fish.string; /*  String 字符串类:     题目:new String("abc")创建了几个对象?  两个对象,一个对象是 位于字符串常量池中,一个对象是位于堆内存中.    */ public class Demo1 {     public static void main(String[] args) {         String str1 = "hello";         String str2 = 

Java之String,StringBuffer,StringBuilder类

在 java 语言中, 用来处理字符串的的类常用的有 3 个: String.StringBuffer.StringBuilder. 它们的异同点: 1) 都是 final 类, 都不允许被继承; 2) String 长度是不可变的, StringBuffer.StringBuilder 长度是可变的; 3) StringBuffer 是线程安全的, StringBuilder 不是线程安全的.就是说StringBuffer类中的很多方法使用了synchronized关键字修饰,允许多线程进行操

java记录对象前后修改的内容(工具类)

有时候业务需要,需记录一条记录的修改历史,但是不能为完成任务而硬编码,不靠谱 这种情况可以使用java反射来完成 对对象属性的描述可以通过自定义注解来完成,读取里面的属性进而记录修改历史. 在对象的属性上面加上注解,value设置为属性的中文描述 工具了代码如下 util类(BeanChangeUtil) 1 import java.beans.PropertyDescriptor; 2 import java.lang.reflect.Field; 3 import java.lang.ref

java String、StringBuffer、StringBuilder

 1.简介 String是不可变类,且是线程安全的: StringBuffer是可变类,且是线程安全的: StringBuilder是可变类,且不是线程安全的. 注:“可变/不可变”指对该类对象进行修改操作时,是否会产生新的对象.对String对象进行修改时会产生新的对象, 对StringBuffer和StringBuilder对象修改时不会产生新的对象. String类的定义如下,使用了final关键字: 1 /** The value is used for character storag