String,StringBuffer,StringBuilder三者的异同

String,StringBuffer,StringBuilder三者的异同:?

  1. String:不可变的字符序列;底层使用char[]存储(用final修饰)

  2. StringBuffer:可变的字符序列;线程安全的,效率低;底层使用char[]存储(不用final修饰)

  3. StringBuilder:可变的字符序列;jdk5.0新增的,非线程安全的,效率高;底层使用char[]存储(不用final修饰),StringBuffer的单线程版,AbstractStringBuilder是其与StringBuffer的共同父类

源码分析:
* String str = new String(); //new char[0]
* String str1 = new String(“abc”); //new char[]{‘a’,‘b’,‘c’};
*
* StringBuffer buffer1 = new StringBuffer(); //new char[16];底层创建了以个长度为16的char数组,StringBuilder空参构造器同样也是创建16个长度的char数组
* buffer1.appen(‘a’); //value[0] = ‘a’
* buffer1.appen(‘b’); //value[0] = ‘b’
* System.out.println(buffer1.length()); //0 返回的是count值而不是char数组的长度
*
*StringBuffer buffer = new StringBuffer(“abc”);//char[] value = new char[(str.length() + 16)];

 * 问题一:System.out.println(buffer.length()); //3 返回的是count值而不是char数组的长度
 * 问题二:扩容问题:
 * 默认情况,扩容为原来容量的2倍+2,同时将原有的数组元素复制到新数组中,如果还不够需要扩容为新加长度和原有长度的总和
 * 建议:开发中建议使用: public StringBuffer(int capacity)或new StringBuilder(int capacity)新建字符串
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值