首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StringBuilder容量()

StringBuilder容量()
EN

Stack Overflow用户
提问于 2010-07-06 15:17:57
回答 8查看 39.2K关注 0票数 18

我注意到capacity方法返回StringBuilder容量,没有一种逻辑方式...有时它的值等于字符串长度,另一些时候它更大...

有没有一个方程式用来知道哪一个是它的逻辑?

EN

回答 8

Stack Overflow用户

发布于 2010-07-06 15:23:36

当您附加到StringBuilder时,会发生以下逻辑:

代码语言:javascript
复制
if (newCount > value.length) {
    expandCapacity(newCount);
}

其中newCount是所需的字符数,value.length是缓冲区的当前大小。

expandCapacity只是增加了后备char[]的大小

ensureCapacity()方法是调用expandCapacity()的公共方法,它的文档说:

确保容量至少等于指定的最小值。如果当前容量小于参数,则分配具有更大容量的新内部数组。新容量是以下各项中较大的一个:

argument.

  • Twice
  • minimumCapacity
  • the minimumCapacity,再加上2.

如果minimumCapacity参数为非正参数,则此方法不执行任何操作,而只是返回。

票数 15
EN

Stack Overflow用户

发布于 2013-12-10 20:49:06

我将尝试用一些例子来解释这一点。

代码语言:javascript
复制
public class StringBuilderDemo {
     public static void main(String[] args) {
         StringBuilder sb = new StringBuilder();
         System.out.println(sb.length());
         System.out.println(sb.capacity());
     }
}

length() -构建器中字符序列的长度,因为这个字符串构建器不包含任何内容,所以它的长度将为0。

capacity() -已分配的字符空间的数量。当你尝试构建一个空内容的字符串生成器时,默认情况下,它的初始化大小是0+16,所以length+16在这里会返回16。

注意: capacity()方法返回的容量始终大于或等于长度(通常大于),并将根据需要自动扩展以适应字符串构建器的添加。

容量函数背后的逻辑:

  1. 如果您没有使用任何内容初始化stringbuilder,则默认容量将被视为16个字符的容量。如果您使用任何内容初始化stringbuilder,则容量将是content capacity+1)*2.

您将新内容添加到stringbuilder对象,如果当前容量不足以获取新值,则它将增长(以前的

  • 数组

此分析取自actual StringBuilder.java code

票数 15
EN

Stack Overflow用户

发布于 2010-07-06 15:20:50

此函数执行的操作与您预期的不同-它给出了此StringBuilder实例内存此时可以容纳的最大字符数。

String Builder must read

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3184244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档