Java教程

Java StringBuffer

Java StringBuffer类用于创建可变(可修改)字符串。 Java中的StringBuffer类与String类相同,但它是可变的,即可以更改。

注意: Java StringBuffer类是线程安全的,即多个线程无法同时访问它。因此,这是安全的,将导致订单。

StringBuffer类的重要构造方法

构造函数 说明
StringBuffer() 创建一个初始容量为16的空字符串缓冲区。
StringBuffer(String str) 用指定的字符串创建一个字符串缓冲区。
StringBuffer(int capacity) 创建一个具有指定容量作为长度的空字符串缓冲区。

StringBuffer类的重要方法

修饰符和类型 方法 说明
public synchronized StringBuffer append(String s) 用于在指定的字符串后附加此字符串。 append()方法已重载,如append(char),append(boolean),append(int),append(float),append(double)等。
public synchronized StringBuffer insert(int offset,String s) 用于在此字符串的指定位置插入指定字符串。 insert()方法已重载,如insert(int,char),insert(int,boolean),insert(int,int),insert(int,float),insert(int,double)等。
public synchronized StringBuffer replace(int startIndex,int endIndex,String str) 用于替换指定的startIndex和endIndex中的字符串。
public synchronized StringBuffer delete(int startIndex,int endIndex) 用于从指定的startIndex和endIndex删除字符串。
public synchronized StringBuffer reverse() 用于反转字符串。
public int capacity() 用于返回当前容量。
public void ensureCapacity(int minimumCapacity) 用于确保容量至少等于给定的最小值。
public char charAt(int index) 用于返回指定位置的字符。
public int length() 用于返回字符串的长度,即字符总数。
public String substring(int beginIndex) 用于从指定的beginIndex返回子字符串。
public String substring(int beginIndex,int endIndex) 用于从指定的beginIndex和endIndex返回子字符串。

什么是可变字符串

可以修改或更改的字符串称为可变字符串。 StringBuffer和StringBuilder类用于创建可变字符串。

1)StringBuffer append()方法

append()方法将给定参数与此字符串连接在一起。
class StringBufferExample{
    public static void main(String args[]){
        StringBuffer sb=new StringBuffer("Hello ");
        sb.append("Java");
        System.out.println(sb);
    }
}

2)StringBuffer insert()方法

insert()方法将给定字符串与该字符串插入给定位置。
class StringBufferExample2{
    public static void main(String args[]){
        StringBuffer sb=new StringBuffer("Hello ");
        sb.insert(1,"Java");
        System.out.println(sb);
    }
}

3)StringBuffer replace()方法

replace()方法从指定的beginIndex和endIndex替换给定的字符串。
class StringBufferExample3{
    public static void main(String args[]){
        StringBuffer sb=new StringBuffer("Hello");
        sb.replace(1,3,"Java");
        System.out.println(sb);
    }
}

4)StringBuffer delete()方法

StringBuffer类的delete()方法将字符串从指定的beginIndex删除为endIndex。
class StringBufferExample4{
    public static void main(String args[]){
        StringBuffer sb=new StringBuffer("Hello");
        sb.delete(1,3);
        System.out.println(sb);
    }
}

5)StringBuffer reverse()方法

StringBuilder类的reverse()方法将当前字符串反向。
class StringBufferExample5{
    public static void main(String args[]){
        StringBuffer sb=new StringBuffer("Hello");
        sb.reverse();
        System.out.println(sb);
    }
}

6)StringBuffer Capacity()方法

StringBuffer类的Capacity()方法返回缓冲区的当前容量。缓冲区的默认容量为16。如果字符数从当前容量增加,它将增加(oldcapacity * 2)+2。例如,如果您当前的容量为16,则将为(16 * 2)+ 2 = 34。
class StringBufferExample6{
    public static void main(String args[]){
        StringBuffer sb=new StringBuffer();
        System.out.println(sb.capacity());
        sb.append("Hello");
        System.out.println(sb.capacity());
        sb.append("java is my favourite language");
        System.out.println(sb.capacity());
    }
}

7)StringBuffer sureCapacity()方法

StringBuffer类的ensureCapacity()方法可确保给定容量为当前容量的最小值。如果大于当前容量,则将容量增加(oldcapacity * 2)+2。例如,如果您当前的容量为16,则将为(16 * 2)+ 2 = 34。
class StringBufferExample7{
    public static void main(String args[]){
        StringBuffer sb=new StringBuffer();
        System.out.println(sb.capacity());
        sb.append("Hello");
        System.out.println(sb.capacity());
        sb.append("java is my favourite language");
        System.out.println(sb.capacity());
        sb.ensureCapacity(10);
        System.out.println(sb.capacity());
        sb.ensureCapacity(50);
        System.out.println(sb.capacity());
    }
}

String和StringBuffer之间的区别

String和StringBuffer之间有很多区别。下面列出了String和StringBuffer之间的差异:
String StringBuffer
String是不可变的。 StringBuffer类是可变的。
当您连接太多字符串时,字符串速度很慢并且会占用更多内存,因为每次创建新实例时都如此。 StringBuffer速度很快,并且在您可以分配字符串时消耗的内存更少。
String重写Object类的equals()方法。因此,您可以通过equals()方法比较两个字符串的内容。 StringBuffer类不会覆盖Object类的equals()方法。

String vs StringBuffer

String和StringBuffer的性能测试

public class ConcatTest{
    public static String concatWithString() {
        String t = "Java";
        for (int i=0; i<10000; i++){
            t = t + "Tpoint";
        }
        return t;
    }
    public static String concatWithStringBuffer(){
        StringBuffer sb = new StringBuffer("Java");
        for (int i=0; i<10000; i++){
            sb.append("Tpoint");
        }
        return sb.toString();
    }
    public static void main(String[] args){
        long startTime = System.currentTimeMillis();
        concatWithString();
        System.out.println("Time taken by Concating with String: "+(System.currentTimeMillis()-startTime)+"ms");
        startTime = System.currentTimeMillis();
        concatWithStringBuffer();
        System.out.println("Time taken by Concating with StringBuffer: "+(System.currentTimeMillis()-startTime)+"ms");
    }
}
Time taken by Concating with String: 578msTime taken by Concating with StringBuffer: 0ms

String和StringBuffer HashCode测试

如下面的程序所示,当您连接字符串时,String返回新的哈希码值,但是StringBuffer返回相同的值。
public class InstanceTest{
    public static void main(String args[]){
        System.out.println("Hashcode test of String:");
        String str="java";
        System.out.println(str.hashCode());
        str=str+"tpoint";
        System.out.println(str.hashCode());
        System.out.println("Hashcode test of StringBuffer:");
        StringBuffer sb=new StringBuffer("java");
        System.out.println(sb.hashCode());
        sb.append("tpoint");
        System.out.println(sb.hashCode());
    }
}
Hashcode test of String:3254818229541438Hashcode test of StringBuffer:118352462118352462
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4