本文主要是介绍Java源码分析六(StringBulider),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java源码分析六(StringBulider)
**继承的类和接口分析**
```
AbstractStringBuilder、Serializable、CharSequence
```
**类中出现的属性**
```
序列号
static final long serialVersionUID = 4383685877147921099L;
```
**构造器**
```
//默认调用父类AbstractStringBuilder 创建一个长度为16的char数组
public StringBuilder() {
super(16);
}
//传入一个字符串父类CharSequence 创建一个seq.length+16的char数组
public StringBuilder(CharSequence seq) {
this(seq.length() + 16);
append(seq);
}
//根据你传入的int值 创建一个长度为capacity的char数组
public StringBuilder(int capacity) {
super(capacity);
}
//同上面CharSequence一个原理
public StringBuilder(String str) {
super(str.length() + 16);
append(str);
}
```
**类中出现的方法**
```
//根据传入的布尔值调用父类的append(boolean b)方法方法使用步骤如下先判断当前count值(char数组存的数值)+“true” or“false”的长度
//4 或5 查询一下是否数组的长度够(如果不够就扩容扩容机制如下)
//父类的扩容方法 默认新数组的长度为原数组的二倍+2 如果设计int 比较少见基本上没这么长的字符串越界问题就麻烦了 暂时就不说了
private int newCapacity(int minCapacity) {
// overflow-conscious code
int newCapacity = (value.length << 1) + 2;
if (newCapacity - minCapacity < 0) {
newCapacity = minCapacity;
}
return (newCapacity <= 0 || MAX_ARRAY_SIZE - newCapacity < 0)
? hugeCapacity(minCapacity)
: newCapacity;
}
public StringBuilder append(boolean b) {
super.append(b);
return this;
}
//跟上面类似传入一个字符先判断空间够不够 不够就扩容 原理一样
public StringBuilder append(char c) {
super.append(c);
return this;
}
//先判断空间是否够否则扩容
public StringBuilder append(char[] str) {
super.append(str);
return this;
}
//方法类似 先判断当前数组长度能不能加入len长度数据 如果不能就扩容如果可以就在当前count后
//存入str数组从offset开始len个数据
public StringBuilder append(char[] str, int offset, int len) {
super.append(str, offset, len);
return this;
}
//加个字符串的父类 原理一模一样
public StringBuilder append(CharSequence s) {
super.append(s);
return this;
}
//跟上面原理一模一样 上面相当于 (s,0,arr.length)
public StringBuilder append(CharSequence s, int start, int end) {
super.append(s, start, end);
return this;
}
//追加一个double
public StringBuilder append(double d) {
super.append(d);
return this;
}
//在后面追加一个float
public StringBuilder append(float f) {
super.append(f);
return this;
}
//添加int值的时候 如果i是int的最小值直接append("-2147483648"); 然后他自己看是否需要扩容 否则根据int值的长度去判断是否需要扩容
public StringBuilder append(int i) {
super.append(i);
return this;
}
//和int类似 先判断是否是long的最小值
public StringBuilder append(long lng) {
super.append(lng);
return this;
}
这篇关于Java源码分析六(StringBulider)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!