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

没有网站 可以做cpa网站关键词优化

没有网站 可以做cpa,网站关键词优化,做网站开票几个税点,英文营销网站建设要深入了解 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.hkea.cn/news/549452/

相关文章:

  • 网站建设平台简介链接交换平台
  • 照片展示网站模板宁波seo咨询
  • 奉贤建设机械网站制作长沙网址seo
  • 上海企业网站模板建站常用的网络推广方法
  • 大连零基础网站建设教学培训济南seo优化公司
  • html 做网站案例简单网站推广建设
  • 践行新使命忠诚保大庆网站建设线上广告
  • 定制网站建设服务商商家联盟营销方案
  • 集团官网建设公司外贸seo推广公司
  • 佛山新网站制作平台网站诊断工具
  • 做PPT的网站canvawhois查询
  • 营销型网站建设吉林定制化网站建设
  • 个人网上公司注册流程图新站优化案例
  • 做se要明白网站明星百度指数排名
  • 网页微博草稿箱在哪西安seo推广优化
  • 嘉兴微信网站建设谷歌首页
  • 什么网站做海报b站不收费网站
  • 如何自己做个简单网站seo知识点
  • 有哪些做批发的网站有哪些手续百度推广优化是什么意思
  • 用阿里巴巴店铺做公司网站怎么样引擎搜索有哪些
  • 网页制作软件属于什么软件类别简述seo的优化流程
  • 网站建设 公司新闻谷歌排名网站优化
  • 怎样做自己的vip解析网站佛山外贸seo
  • 我的网站在百度搜不到了seo是什么职业做什么的
  • 网站私信界面国外网站seo免费
  • wordpress mysql类惠州网站seo
  • 为什么做网站必须要用域名举出最新的网络营销的案例
  • 电子请柬网站开发百度竞价推广登录入口
  • 网站设计与推广国际时事新闻2022最新
  • 柬埔寨网站开发营销技巧和营销方法