java基础 - String/StringBuffer/StringBuilder的使用

本文深入探讨 Java 中 String 类及其不可变性的特点,并对比分析 StringBuffer 和 StringBuilder 的使用场景。

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

 java.lang里String相关的类主要有三个: String/StringBuffer/StringBuilder。其中最特殊的要数String类。

学习语言的最好途径是源代码和jdk,所以我们先来看看他们的源代码片断,各自的特性就自然而然展现出来。

 

(一) 字符串类的特性

  public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence
{
    /** The value is used for character storage. */
    private final char value[];

 

 public final class StringBuffer
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence
{

 

public final class StringBuilder
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence
{

abstract class AbstractStringBuilder implements Appendable, CharSequence {
    /**
     * The value is used for character storage.
     */
    char value[];

 

从上面的代码中大家可能已经看出了点什么端倪,接下来我就总结一下:

1,这三个类都用final修饰,所以他们都是不可以继承的。

2,只有String类的value--字符串值---用了final修饰,这指明了value在String对象创建之后就不能修改(immutable),

    而StringBuffer和StringBuilder是可以的。也就是说如果你需要一个可以任你随时改变的字符串的时候,应该用StringBuffer

   或者StringBuider,而不是String。

 

这个时候或许你有疑问了---

Qa1:既然String是类,那么我可以用new来创建它了?  String s = new String("hello");

Answer:最好不要这样,因为这样会生成两个String对象,不仅加大了内存开销还降低了效率。

             jdk说,当jvm碰到"hello"这样的字面字符串,会自动为其生成一个String对象。

             既然jvm已经替你生成了,你何必再去生成一次呢?只需要定义一个指向String对象的引用,然后让引用指向那个对象就可以了。

             即:  String s = "hello";

 

Qa2:我经常看到如下的代码,明明s的value改变了呀问什么说value不能改变呢?

                       String s = "abc";   s = s+"de";

 Answer: 这里s的value确实是不一样了,但是是因为s指向的object变了,而不是object本身的value变了。

               其实每次你试图改变的时候jvm都会为你生成一个新的object。 上面的“+”的结果就是创建了一个新的String对象,

               它的value是“abcde”,然后s指向了这个新的String object,表面上看,你确实改变了s的value。但请牢记,s只是

               可以指向String对象的一个引用,而不是对象本身。

 

 (二)字符串对象提供的服务

接下来我们看一下这三个字符串类给我们提供了什么服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值