Java中字符串的详细分析

  介绍

小编给大家分享一下Java中字符串的详细分析,希望大家阅读完这篇文章后大所收获、下面让我们一起去探讨吧!

本篇文章我们深入的来分析一下与字符串相关的另外两个类,它们分别是StringBuilder和StringBuffer。这两个类与字符串有什么关系呢?首先我们看下下边这张类图:

StringBuilder和StringBuffer都继承了AbstractStringBuilder,而AbstractStringBuilder与字符串实现了共同的接口CharSequence进行。

我们知道,字符串是由一系列字符组成的,字符串的内部就是基于字符数组(jdk9之后基于字节数组)实现的,而数组通常是一块连续的内存区域,在数组初始化的时候就需要指定数组的大小。上一篇文章中我们已经知道字符串是不可变的,因为它内部的数组被声明为了决赛,同时,字符串的字符拼接、插入,删除等操作均是通过实例化新的对象实现的。而今天要认识的StringBuilder和StringBuffer与字符串相比就具有了动态性。接下来就让我们一起来认识下这两个类。

一、StringBuilder

在StringBuilder的父类AbstractStringBuilder中可以看到如下代码:

抽象类AbstractStringBuilder实现Appendable CharSequence进行{/* *
  *用于字符存储的值。
  */char[]值;/* *
  *使用的计数是字符的数量。
  */int数;
  }复制代码

StringBuilder与字符串一样都是基于字符数组实现的,不同的是StringBuilder没有最后修饰,这就意味着StringBuilder是可以被动态改变的。接下来看下StringBuilder无参构造方法,代码如下:

/* *
  *创建一个AbstractStringBuilder指定的能力。
  */AbstractStringBuilder (int能力){
  值=https://www.yisu.com/zixun/new char[能力];
  }复制代码

AbstractStringBuilder的构造方法内部初始化了一个容量为能力的数组。也就是说StringBuilder默认初始化了一个容量为16的char[]数组.StringBuilder中除了无参构造外还提供了多个构造方法,源码如下:

//StringBuilder
  @Override
  公共StringBuilder append (String str) {super.append (str);返回;
  }//AbstractStringBuilder
  公共AbstractStringBuilder append (String str){如果(str==null)返回appendNull ();int len=str.length ();
  ensureCapacityInternal(计数+ len);
  str.getChars (0 len值,计算);
  数+=兰;返回;
  }复制代码

在附加方法的第一行首先进行了零检查,等于零的时候调用了appendNull方法。其源码如下:

Java中字符串的详细分析