Java源码分析六(StringBulider)

2021/9/14 11:36:25

本文主要是介绍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)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程