StringBuilder和StringBuffer可变字符序列的常用方法和陷阱

 package zuoye2;

import java.util.Arrays;

/**
 * StringBuilder和StringBuffer可变字符序列的常用方法
 * @author 110
 *
 */
public class study04 {
    public static void main(String[] args) {
        //StringBuilder线程不安全,效率高(一般使用这个,不涉及到安全)StringBuffer线程安全,效率低。
        StringBuilder sb = new StringBuilder("abcd");//可变字符序列
        StringBuffer sb2=  new StringBuffer();
        System.out.println(Integer.toHexString(sb.hashCode()));//输出sb对象的地址。
        System.out.println(sb);
        sb.setCharAt(2, 'M');
        System.out.println(Integer.toHexString(sb.hashCode()));//输出sb对象的地址。
        System.out.println(sb);//发现输出的地址是一样的,说明对象并没有改变,是同一个对象
        //但是输出sb的内容变了,这就意味着StringBuilder是一个可变字符序列,而String是不可变字符序列.
        
        for(int i=0;i<26;i++) {
            sb.append((char)('a'+i));//append在sb原有字符串后面加东西
        }
        System.out.println(sb);
        
        sb.reverse();//将sb字符串倒叙。
        System.out.println(sb);
        
        sb.setCharAt(3, '高');
        System.out.println(sb);
        
        sb.insert(0, '我');//该方法调用return this,吧自己返回了,可以继续插入,链式调用
        sb.insert(1, '你').insert(2, '它').insert(5, "你");//链式调用
        System.out.println(sb);
        
        sb.delete(20, 23);//删除某个区间,也可以链式调用。
        System.out.println(sb);
        
        //测试可变字符序列和不可变字符序列使用的陷阱
        String str8="";
        for(int i=0;i<5000;i++) {
            str8=str8+i;//因为要和str8连接,所以会生成一个字符串,之后连接后再生成一个字符串,这个循环会产生10000个字符串
                        //以后如果写服务器端程序,会不停收到用户端访问,对象太多,会造成系统崩溃,所以一般使用下面的
        }
        StringBuilder sb8 = new StringBuilder("");
        for(int i = 0;i<5000;i++) {
            sb8.append(i);//这个是直接往后面加,不用创建新对象,所以程序效率高
        }
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值