JAVA基础类库---StringBuffer

本文深入解析了Java中的String、StringBuffer和StringBuilder类,包括它们的特点、实例化方式、内容可变性、方法对比以及如何在不同场景下选择使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、String类的特点:

(1)String对象有两种实例化方式:

直接赋值:只开辟一块堆内存空间。可以自动入池;

构造方法:开辟两块堆内存空间,不会自动入池,可用intern()手工入池;

(2)字符串是String类的匿名对象;

(3)字符串一旦声明则不可更改,改变的是String对象的引用;

2、为解决String类的内容不可改变的问题,Java提供了StringBuffer类(StringBuffer对象的内容可以修改)。

String类使用+进行字符串的连接,而StringBuffer必须使用append()进行连接操作:

append()定义:public StringBuffer append(数据类型 变量);

范例:StringBuffer使用

public class Demo {
    public static void main(String[] args) {
        // String类可以直接赋值,但是StringBuffer只能通过构造方法
        StringBuffer buf = new StringBuffer();
        buf.append("hello").append(" World ").append("!!");
        change(buf); // 引用传递
        System.out.println(buf);
        // 结果:
        // hello World !!
        // Hello
    }

    public static void change(StringBuffer temp) {
        temp.append("\n").append("Hello");
    }
}

由上述代码可以发现StringBuffer类的内容可以修改,而String的内容不可以修改。

3.、String类与StringBuffer类的定义

String类StringBuffer类
public final class String extends Object implements Serializable, Comparable<String>, CharSequencepublic final class StringBuffer extends Object implements Serializable, CharSequence

由上表得知,StringStringBuffer都是CharSequence接口的子类。因此在开发中,如果某些方法的操作使用CharSequence接口,那么只要传递字符串即可。

public class Demo {
    public static void main(String[] args) {
        CharSequence seq = "hello"; // 向上转型
        System.out.println(seq); // 调用String类覆写的toString()
    }
}

4、虽然String和StringBuffer类有着共同的接口,但是这两个类的对象之间不能直接转换。

(1)将String变为StringBuffer对象有两种方式:

方式一:利用StringBuffer构造方法:public StringBuffer(String str);

public class Demo {
    public static void main(String[] args) {
        // 将Hello由String型变为StringBuffer型
        StringBuffer buf = new StringBuffer("Hello");
        System.out.println(buf);
    }
}

方式二:利用append()public StringBuffer append(String str)

public class Demo {
    public static void main(String[] args) {
        StringBuffer buf = new StringBuffer();
        // 将Hello由String型变为StringBuffer型
        buf.append("Hello");
        System.out.println(buf);
    }
}

(2)将StringBuffer变为String类对象

方式一: 利用toString()可以将StringBuffer转换为String;

public class Demo {
    public static void main(String[] args) {
        StringBuffer buf = new StringBuffer("Hello");
        String str = buf.toString();
        System.out.println(str);
    }
}

方式二:利用String类的构造方法:public String(StringBuffer buffer);

5、String类中提供有与StringBuffer对象比较的方法:public boolean contentEquals(StringBuffer sb)

范例:比较StringStringBuffer

public class Demo {
    public static void main(String[] args) {
        StringBuffer buf = new StringBuffer("Hello");
        System.out.println("hello".contentEquals(buf)); // false
        System.out.println("Hello".contentEquals(buf)); // true
    }
}

6、String类中定义了许多方法,便于用户开发;而StringBuffer中也定义了许多方法,而且部分方法与String类正好互补。

(1)字符串反转:public StringBuffer reverse();

public class Demo {
    public static void main(String[] args) {
        StringBuffer buf = new StringBuffer("Hello");
        System.out.println(buf.reverse()); // olleH
    }
}

(2)在指定位置插入数据:public StringBuffer insert(intoffset,数据类型 变量);

public class Demo {
    public static void main(String[] args) {
        StringBuffer buf = new StringBuffer("Hello");
        buf.insert(0, "MLDN").insert(0, "你好");
        System.out.println(buf); // 你好MLDNHello
        // 可以插入任意数据类型的数据
        buf.insert(0,11);
        System.out.println(buf); // 11你好MLDNHello
    }
}

(3)删除部分数据:public StringBuffer delete(int start,int end);

public class Demo {
    public static void main(String[] args) {
        StringBuffer buf = new StringBuffer("Hello");
        buf.delete(2,4);
        System.out.println(buf); // Heo
    }
}

7、JDK1.5新增了一个字符串操作类:StringBuilder,定义结构如下:

public final class StringBuilderextends Object implements Serializable,CharSequence

StringBufferStringBuffer类在定义上非常相似,并且方法也几乎一样。

小结:String、StringBufferStringBuilder的区别?

String的内容一旦声明则不可改变,而StringBufferStringBuilder声明的内容可以改变;

StringBuffer类中提供的方法都是同步方法,属于安全的线程操作;而StringBuilder提供的方法都是非同步方法,属于不安全的线程操作。

开发中使用String类,只有要频繁修改内容时,才考虑使用StringBufferStringBuilder

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值