`
JhonStryker
  • 浏览: 19536 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

StringBuilder与StringBuffer中的length()和capacity()方法

    博客分类:
  • JAVA
阅读更多

 

在JAVA常用类中有StringBuilder与StringBuffer这两个用来处理字符串的类,其中有两个很常用的方法length()和capacity(),发现他们之间还是有一点区别的。

 

 

StringBuilder sbd = new StringBuilder("abcde");
StringBuilder sbd2 = new StringBuilder();
StringBuffer sbf = new StringBuffer("abcde");
StringBuffer sbf2 = new StringBuffer();

System.out.println(sbd.length());
System.out.println(sbd.capacity());
System.out.println(sbd2.length());
System.out.println(sbd2.capacity());

System.out.println(sbf.length());
System.out.println(sbf.capacity());
System.out.println(sbf2.length());
System.out.println(sbf2.capacity());

 

结果为:

5
21
0
16
5
21
0
16

 

所以,length()代表的是其中内容的长度,capacity()代表的是容器的大小。

 

PS:其中还发现一个小现象

 

StringBuilder sbd = new StringBuilder('a');

System.out.println(sbd.length());
System.out.println(sbd.capacity());

 结果为:

0
97

 如果将'a'换成"a",结果就正常了为:

1
17

 跟到源码中看了一下,发现是调用了不同的构造器

public StringBuilder(int capacity) {
	super(capacity);
}    //传'a'时被转换成了int,所以length没有长度,而capacity长度是97

public StringBuilder(String str) {
super(str.length() + 16);
append(str);
}     //传"a"时是正常的字符串

 

0
0
分享到:
评论

相关推荐

    StringBuffer & StringBuilder 源码分析.docx

    AbstractStringBuilder 是 StringBuffer 和 StringBuilder 两者的父类,它定义了基本的字符串操作方法,如 length()、capacity()、ensureCapacity() 等。AbstractStringBuilder 类中有两个重要的成员变量,value 和 ...

    java中stringBuilder的用法.pdf

    - Length属性:获取StringBuilder中字符序列的长度。 - Capacity属性:获取或设置StringBuilder对象的容量。 5. StringBuilder在实际应用中的例子: - 在拼接大量字符串时,使用StringBuilder可以有效避免创建...

    JAVA面试题 从源码角度分析StringBuffer和StringBuilder的区别

    在本文中,我们将从源码角度分析StringBuffer和StringBuilder的区别,这两个类都是Java中常用的字符串操作类,但是它们之间有什么区别呢?下面我们来一起学习下吧。 继承关系 ----- 在Java中,StringBuffer和...

    Java StringBuffer类与StringBuilder类用法实例小结

    Java中的`StringBuffer`类和`StringBuilder`类都是用来处理可变字符串的,它们提供了在字符串操作中添加、删除、替换和截取等方法。这两个类的主要区别在于线程安全性,`StringBuffer`是线程安全的,而`...

    JAVA_StringBuffer

    6. **length()**和`capacity()`:`length()`返回缓冲区当前的字符串长度,`capacity()`则返回当前的容量,即能容纳的最大字符数。如果需要增加容量,可以调用`ensureCapacity()`。 7. **toString()**:当操作完成并...

    Java StringBuffer

    在这个示例中,我们创建了一个`StringBuffer`对象,然后使用`append`、`insert`、`delete`、`replace`和`reverse`方法展示了其功能。 六、应用场景 `StringBuffer`常用于需要多次修改字符串的情况,特别是多线程...

    api_StringBuffer.zip_fullvgv_java_tasteazi

    在多线程环境中,`StringBuffer`比直接使用`+`操作符或`StringBuilder`更推荐,因为它的所有方法都是同步的,避免了线程竞争条件导致的性能问题。 `StringBuffer`类包含了许多实用的方法,这些方法在处理字符串时...

    java StringBuffer详解

    本篇文章将深入探讨`StringBuffer`的原理、用法及其与`StringBuilder`的区别。 1. **基本概念** `StringBuffer`是Java中处理字符串的类,它继承自`AbstractStringBuilder`并实现了`Serializable`和`CharSequence`...

    06 AbstractStringBuilder

    在Java 1.5及后续版本中,`AbstractStringBuilder`被引入作为`StringBuilder`和`StringBuffer`的基础实现类。这个类实现了`Appendable`和`CharSequence`接口,并提供了多种方法来支持字符串的修改操作。 #### 类...

    常用类的方法集合

    ### 常用类的方法集合 #### String 类 **String 类** 在 Java 语言中扮演着极其重要的角色,它是不可...通过上述介绍,我们可以了解到 Java 中常用类的构造方法和成员方法,这些类和方法为日常编程提供了极大的便利。

    java个人学习笔记

    它们的`length()`方法返回当前长度,`capacity()`返回可分配的最大容量。 输入处理通常通过`Scanner`类完成,如`Scanner in = new Scanner(System.in); String name = in.nextLine();`,这可以从控制台读取用户输入...

    实验一 Java常用工具类编程.doc

    在实际开发中,我们还需要考虑线程安全、性能优化等因素,因此在大量字符串操作时,`StringBuilder`(非线程安全但效率更高)往往比`StringBuffer`更受欢迎。而对于日期操作,Java 8引入的`java.time`包提供了更为...

Global site tag (gtag.js) - Google Analytics