String、StringBuffer与StringBuilder的区别以及类之间的关系

三者区别

String 不可变字符串,另外两个是可变的。

StringBuffer 可变字符串,是线程安全的内部用的synchronized 做的线程安全。

StringBuilder 可变字符串,非线程安全。

从类关系图看

CharSequence

CharSequence中的方法

可以看到String、StringBuffer与StringBuilder都实现了CharSequence接口。

CharSequence是一个接口,表示char值的一个可读序列。此接口对许多不同种类的char序列提供统一的自读访问。此接口不修改该equals和hashCode方法的常规协定,因此,通常未定义比较实现CharSequence 的两个对象的结果。

CharSequence与String都能用于定义字符串,但CharSequence的值是可读可写序列,而String的值是只读序列。

对于一个抽象类或者是接口类,不能使用new来进行赋值,但是可以通过以下的方式来进行实例的创建:CharSequence cs = "pine";

Appendable

Appendable接口中的方法

明显能够看到主要是用于定义拼接方法的接口类。

下面看一个append实现方法。

@Override
  public AbstractStringBuilder append(CharSequence s, int start, int end) {
      if (s == null)
          s = "null";
      if ((start < 0) || (start > end) || (end > s.length()))
          throw new IndexOutOfBoundsException(
              "start " + start + ", end " + end + ", s.length() "
              + s.length());
      int len = end - start;
      ensureCapacityInternal(count + len);
      for (int i = start, j = count; i < end; i++, j++)
          value[j] = s.charAt(i);
      count += len;
      return this;
  }

从方法中不难看出为啥我们拼接为NULL的对象是为啥拼接的字符串是“null”了。

另外Formatter相关的类也会实现Appendable接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值