当前位置: 首页 > news >正文

网站程序 seo开网站怎么赚钱

网站程序 seo,开网站怎么赚钱,wordpress登录logo,网站系统模版要深入了解 StringBuffer 和 StringBuilder 的区别,从底层源码的角度来解析,包括它们的创建、扩容机制等,可以参考 JDK 1.8 的源码。 1. AbstractStringBuilder 类 StringBuffer 和 StringBuilder 都继承自 AbstractStringBuilder。…

        要深入了解 StringBuffer 和 StringBuilder 的区别,从底层源码的角度来解析,包括它们的创建、扩容机制等,可以参考 JDK 1.8 的源码。

1. AbstractStringBuilder 类
        

        StringBuffer 和 StringBuilder 都继承自 AbstractStringBuilder。这个类包含了字符串操作的核心逻辑。

AbstractStringBuilder 源码

abstract class AbstractStringBuilder implements Appendable, CharSequence {char[] value;int count;AbstractStringBuilder(int capacity) {value = new char[capacity];}AbstractStringBuilder() {}public int length() {return count;}public int capacity() {return value.length;}public void ensureCapacity(int minimumCapacity) {if (minimumCapacity > value.length) {expandCapacity(minimumCapacity);}}void expandCapacity(int minimumCapacity) {int newCapacity = value.length * 2 + 2;if (newCapacity < minimumCapacity) {newCapacity = minimumCapacity;}value = Arrays.copyOf(value, newCapacity);}public AbstractStringBuilder append(String str) {if (str == null)str = "null";int len = str.length();ensureCapacity(count + len);str.getChars(0, len, value, count);count += len;return this;}// ... 其他方法 ...
}

2. StringBuilder 类

StringBuilder 继承了 AbstractStringBuilder,并且不做任何同步处理。

StringBuilder 源码

public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence {public StringBuilder() {super(16);}public StringBuilder(int capacity) {super(capacity);}public StringBuilder(String str) {super(str.length() + 16);append(str);}// 所有的方法都继承自 AbstractStringBuilder,不进行同步
}

3. StringBuffer 类

StringBuffer 继承了 AbstractStringBuilder,并且对所有方法都进行同步处理,以确保线程安全。

StringBuffer 源码

public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharSequence {public StringBuffer() {super(16);}public StringBuffer(int capacity) {super(capacity);}public StringBuffer(String str) {super(str.length() + 16);append(str);}@Overridepublic synchronized StringBuffer append(String str) {super.append(str);return this;}// 所有的方法都进行同步处理
}

4. 扩容机制

扩容机制在 AbstractStringBuilder 中实现。它的核心方法是 expandCapacity,具体如下:

expandCapacity 方法

void expandCapacity(int minimumCapacity) {int newCapacity = value.length * 2 + 2;if (newCapacity < minimumCapacity) {newCapacity = minimumCapacity;}value = Arrays.copyOf(value, newCapacity);
}

初始容量:newCapacity = value.length * 2 + 2,每次扩容时容量会变成原来的两倍加2。
如果新容量小于所需的最小容量,则将新容量设置为最小容量。
通过 Arrays.copyOf 方法将原数组复制到新数组中,并将 value 指向新数组。

5. 创建过程

StringBuilder 创建

StringBuilder sb = new StringBuilder();

调用无参构造函数,初始容量为16。
super(16) 调用 AbstractStringBuilder 的构造函数,value 数组长度为16。

StringBuffer 创建

StringBuffer sb = new StringBuffer();

调用无参构造函数,初始容量为16。
super(16) 调用 AbstractStringBuilder 的构造函数,value 数组长度为16。

6. 扩容示例

假设我们创建一个 StringBuilder,初始容量为16,并向其中添加超过16个字符: 

StringBuilder sb = new StringBuilder();
sb.append("12345678901234567"); // 17个字符

ensureCapacity 方法会检查是否需要扩容。
当前容量是16,不足以容纳17个字符,因此调用 expandCapacity。
计算新容量:newCapacity = 16 * 2 + 2 = 34。
新数组长度为34,原数组内容复制到新数组中。

总结:

        StringBuilder 和 StringBuffer 都继承自 AbstractStringBuilder,并共享其核心实现,包括初始容量和扩容机制。
        线程安全性:StringBuilder 不进行同步处理,而 StringBuffer 对所有方法都进行同步处理。
        扩容机制:扩容策略是原数组长度的两倍加2,当容量不足时扩容,并通过 Arrays.copyOf 方法复制原数组内容。

http://www.yayakq.cn/news/365773/

相关文章:

  • 建设培训中心网站温州新闻
  • 学校后勤网站建设方案小程序源码是什么意思
  • 400电话安装佛山营销网站建设广告免费设计在线生成
  • 什么网站做推广比较好17zwd一起做网站官网
  • 当当网网站建设策划书粤语seo是什么意思
  • 为什么做这个网站项目网络系统管理大赛样题
  • 网站如何做才能被360收录h5页面网站模板
  • 网站建设工程师职责说明书有没有找客户的网站
  • 嘉定做网站wordpress 标签 修改
  • 网站建设主要有哪些成本做汽车商城网站
  • 哪几个网站适合自己做外贸做网站的时候说需求的专业术语
  • 西安seo网站排名优化公司企业信用网查询
  • 建好的网站怎么用重庆自助建站模板
  • 哈尔滨市建筑企业管理站营销型手机网站
  • 琳琅秀网站建设网页设计html代码大全居中
  • 深圳公司建站推广永久免费的手机ip代理
  • 网站备案的要求是男的怎么做直播网站
  • 上海嘉定网站十堰吉安营销型网站优化营销
  • 百姓网站外推广怎么做汕头网站推广优化
  • 网站开发项目实训总结体验营销案例
  • 网站qq临时会话怎么弄中国十大公司排名
  • 定制开发响应式网站商城版免费网站
  • 如何做积分商城网站seo北京优化
  • 广州平台网站搭建网站素材大全
  • 公司网站建设济宁网络推广是什么工作
  • 一诺互联 网站建设广州网站推广策划
  • 设计广告公司网站建设网站建设的单可以刷吗
  • 深圳企业网站哪家好网站建设唯地带
  • 网站开发和运行模式的搭建沧州青县机械加工网
  • 邯郸网站设计怎么用哪个学校有网站建设