举例说明string类和stringbuffer类的区别_String、StringBuffer与StringBuilder的区别以及类之间的关系...

三者区别

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

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

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

从类关系图看

df4e351ad9396c26e36f7f57403b877e.png

String类图

c478ae73168321a96855698f892df4dd.png

StringBuffer类图

24c1da5afe15a8402f769f2ebc91a418.png

StringBuilder类图

CharSequence

acdec72c987f03a5a8fa312269ead8f9.png

CharSequence中的方法

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

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

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

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

Appendable

4507c7ec69d05683269adf32b3f1a6a9.png

Appendable接口中的方法

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

下面看一个append实现方法。

@Overridepublic 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接口。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值