Java基础复习-String相关

写这篇的主要目的是为了简单复习一下,并且捎带再详细读一下JDK的源码,学习下人家是如何设计的

String

所有的character strings,在java中就是String这个类的实例。String是一个常量,当被创建之后就不可以被修改,所以是非常安全的。同时,在java中,String之间是可以用加号来进行拼接的(我目前唯一见过的运算符重载)。

首先是它的定义:

1
2
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence

很明显,由于有final的定义,所以String类就不能被继承了。然后实现了三个接口,第一个接口是说明String是可以序列化的,第二个说明String之间是可以进行比较的,而最后一个则是对char组合的实现吧。

然后是重要的成员变量:

1
2
3
private final byte[] value;
private final byte coder;
private int hash; // Default to 0

可以看到value其实就是String的值,而且也是被final修饰的,故String一旦被赋值了就无法修改。

接下来的coder指定编码的方式。

我感觉….其它方法都挺简单的,注意上面提到的这些即可。

StringBuilder和StringBuffer

这两个其实需要一起讲。

首先它们俩都继承了AbstractStringBuilder,并且都实现了java.io.Serializable, CharSequence,而且它们俩其实都调用的是AbstractStringBuilder里面的方法,只不过StringBuffer在方法之前都加上了一个synchronized……

所以其实如果要了解这两个类,只需要去了解AbstractStringBuilder即可。

AbstractStringBuilder

主要成员变量有三个,分别是:

1
2
3
byte[] value;
byte coder;
int count;

分别对应了真实的值、编码方式和长度。