关于StringBuffer对象的capacity方法返回值
2017-04-17 11:21
627 查看
在学习java的过程中,总会手工敲一些代码验证自己的猜想,不久前就遇到这么一个问题。
输出结果如下:
3
16
17
34
不知道为何capacity的值会从16直接跳到34,查了一下资料,得出以下结论:
StringBuffer在内部维护一个字符数组,当你使用缺省的构造函数来创建StringBuffer对象的时候, StringBuffer的容量被初始化为16个字符,也就是说缺省容量就是16个字符。当StringBuffer达到最大容 量的时候,它会将自身容量增加到当前的2倍再加2,也就是(2*旧值+2)。
如果你使用缺省值,初始化之后接着往里面追加字符,在你追加到第17个字符的时候它会将容量增加到34(2*16+2),当追加到34个字符的时候就会将容量增加到70(2*34+2)。无论何事只要StringBuffer 到达它的最大容量它就不得不创建一个新的字符数组然后重新将旧字符和新字符都拷贝一遍。所以给 StringBuffer设置一个合理的初始化容量值,会提升程序的性能。
import java.util.*; import java.lang.*; public class Main{ public static void main(String[] args){ StringBuffer str = new StringBuffer(); str.append("abc"); System.out.println(str.length()); System.out.println(str.capacity()); str.append("defghijklmnopq"); System.out.println(str.length()); System.out.println(str.capacity()); } }
输出结果如下:
3
16
17
34
不知道为何capacity的值会从16直接跳到34,查了一下资料,得出以下结论:
StringBuffer在内部维护一个字符数组,当你使用缺省的构造函数来创建StringBuffer对象的时候, StringBuffer的容量被初始化为16个字符,也就是说缺省容量就是16个字符。当StringBuffer达到最大容 量的时候,它会将自身容量增加到当前的2倍再加2,也就是(2*旧值+2)。
如果你使用缺省值,初始化之后接着往里面追加字符,在你追加到第17个字符的时候它会将容量增加到34(2*16+2),当追加到34个字符的时候就会将容量增加到70(2*34+2)。无论何事只要StringBuffer 到达它的最大容量它就不得不创建一个新的字符数组然后重新将旧字符和新字符都拷贝一遍。所以给 StringBuffer设置一个合理的初始化容量值,会提升程序的性能。
相关文章推荐
- 关于ajax返回对象的实用方法!
- 关于stringbuffer对象的append方法介绍
- java关于类方法返回值是对象以及空返回的区别
- 关于window.open()方法 返回的的打开的新窗口的对象
- 关于struts返回对象json格式数据的方法
- (个人记录)关于JavaScript jQuery对象 find方法返回值为[object object]
- 关于XMLHTTP对象返回编码问题的各种方法整理
- 1-(E-teller)关于向T4Table组件返回多个对象的方法
- 关于在java中List取值的方法(List中是数据对象)!
- 关于在DataTable中执行DataTable.Select("条件")返回DataTable的解决方法
- 处理Clob数据(转)关于oracle中大对象处理的一些方法和实例
- StringBuffer对象的append方法
- 关于Javascript与表单结合时出现"对象不支持此属性或方法"的问题总结(不断更新中...)
- 关于Hibernate组合查询返回对象显示
- 使用反射依导航路径调用对象成员方法,或返回对象子、孙属性或字段成员[转]
- 关于SOAP调用返回对象的写法 wsdl webservice
- ThinkInJava读书笔记——关于Multi Nesting Class的对象初始化方法
- 关于VB调用Access的Rnd函数随机返回表中数据的解决方法
- 关于submit() 对象不支持此属性或方法的解决方法
- session对象关于removeValue方法的验证