zoukankan      html  css  js  c++  java
  • stringbuffer capacity()的疑问

    stringbuffer capacity()的疑问

    public class Example9_11 {
    	public static void main(String args[]) {
    		StringBuffer str = new StringBuffer();
    		str.append("大家好");
    		System.out.println("str:" + str);
    		System.out.println("length:" + str.length());
    		System.out.println("capacity:" + str.capacity());
    		str.append("我们大家都很愿意学习Java");
    		System.out.println("str:" + str);
    		System.out.println("length:" + str.length());
    		System.out.println("capacity:" + str.capacity());
    		StringBuffer sb = new StringBuffer("Hello");
    		System.out.println("length:" + sb.length());
    		System.out.println("capacity:" + sb.capacity());
    	}
    }
    


    str:大家好
    length:3
    capacity:16
    str:大家好我们大家都很愿意学习Java
    length:17
    capacity:34//疑点  16 * 2 + 2
    length:5
    capacity:21


    capacity()返回StringBuffer的容量, length()返回StringBuffer里放着的字符串的长度。




    StringBuffer在内部维护一个字符数组,当你使用缺省的构造函数来创建StringBuffer对象的时候, StringBuffer的容量被初始化为16个字符,也就是说缺省容量就是16个字符。当StringBuffer达到最大容 量的时候,它会将自身容量增加到当前的2倍再加2,也就是(2*旧值+2)。


      如果你使用缺省值,初始化之后接着往里面追加字符,在你追加到第17(原文是16,其实是错误的,因为在追加到第16个字符的时候,容量不会发生变化,很抱歉,以后会更严谨一些^+^)个字符的时候它会将容量增加 到34(2*16+2),当追加到34个字符的时候就会将容量增加到70(2*34+2)。无论何事只要StringBuffer 到达它的最大容量它就不得不创建一个新的字符数组然后重新将旧字符和新字符都拷贝一遍。所以给 StringBuffer设置一个合理的初始化容量值,会提升程序的性能。  


  • 相关阅读:
    概率-期望粗学
    2*2右脚相反矩阵构造 2019牛客暑期多校训练营(第八场)
    Codeforces Round #530 (Div. 2)F Cookies (树形dp+线段树)
    E. Arson In Berland Forest(思维,找二维阵列中的矩阵,二分)
    Codeforces Round #523 (Div. 2) Cdp
    凸包
    E
    G. Petya and Graph(经典项目与项目消耗问题)(网络流)
    Educational Codeforces Round 55 (Rated for Div. 2)E
    hdu 3501 Calculation 2 (欧拉函数的扩展)
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/5835217.html
Copyright © 2011-2022 走看看