【128天】尚学堂高琪Java300集视频精华笔记(56-58)

本文对比分析了String、StringBuilder和StringBuffer的区别与应用场景,详细解释了StringBuilder的工作原理及使用技巧,包括方法链、扩容机制等内容,并通过实例展示了它们在循环中的性能表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第56-57集:StringBuilder和StringBuffer的使用

区分String、StringBuffer、StringBuilder

  1. StringBuilder可变字符串,线程不太安全,但效率高,推荐使用。

  2. StringBuffer可变字符串,线程安全,但效率低,不推荐使用。

  3. String 是不可变字符串,根据实时情况使用,在循环当中不要使用,因为会产生好的没用的字符串。

关于String、StringBuffer、StringBuilder的面试题的回答

  1. StringBuilder效率高,线程不安全,StringBuffer效率低,线程安全。

  2. String是不可变字符串,StringBuilder是可变字符串。(为什么有这样的差异,可以深入源码去解析,比如String类内的 priver final  char  value[] 等方法的原因。)

  3. 如果是简单的声明一个字符串没有后续过多的操作,使用String,StringBuilder均可,若后续对字符穿做频繁的添加,删除操作,或者是在循环当中动态的改变字符穿的长度应该用StringBuilder。使用String会产生多余的字符串,占用内存空间。
     

方法链

其实就是用return this实现的

StringBuilder扩容原理(很重要)

看源码和视频,笔记说不清,简单来说就是将更大长度的数组建好,然后将原数据copy进来,然后再赋值给引用变量value,原来那个老数组失去value的引用,将被作为垃圾回收。

package com.test056;

public class Test01 {
    /**
     * 测试可变字符序列,StringBuilder(线程不安全,效率高),StringBuffer(线程安全,效率低)
     * 
     */
    public static void main(String[] args){
        StringBuilder sb = new StringBuilder();// 字符数组长度初始为16
        StringBuilder sb1 = new StringBuilder(32);// 字符数组长度初始为32
        StringBuilder sb2 = new StringBuilder("ABCD");// 字符数组长度初始为4+16=20,后续append这4个字符,value[] = {'a','b','c','d',/u0000,/u0000......}
        sb2.append("efg");
        sb2.append(true).append(321).append("aaa");//源码中那句return this可以构建方法链
        
        //区分以下两种写法
        
        String two = new String("a"); 
        for(int i = 0;i<1000;i++){
            two = two +i;
        }
        System.out.println(two); //String这段代码一共创建了1002个对象
        
        StringBuilder one = new StringBuilder("a");
        for(int i = 0;i<1000;i++){
            one.append(i);
        }
        System.out.println(one);//这样写就只有2个对象
        
        
    
    
    
    }
    
}

第58集:数组StringBuilder和StringBuffer的使用常用方法补充

  1. StringBuilder与StringBuffer方属性方法一样,只不过StringBuffer方法前都加synchronized

  2. 常用方法:

    1. delete

    2. append

    3. reverse

    4. replace

package com.test059;

public class Test059 {
    public static void main(String[] args){
        StringBuilder  sb = new StringBuilder("abcdefgh");
        sb.append(true).append("ABC").append('a');//方法链
        System.out.println(sb);
        sb.delete(3, 5);//删除方法是[start end) 包头不包尾
        System.out.println(sb);
        sb.replace(3, 5, "Hello");
        System.out.println(sb);//替换方法是将[start end) 的字符替换为指定字符
        System.out.println(sb.length());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值