2.StringBuilder和StringBuffer

1.字符串的分类:

        不可变字符串:String

        可变字符串:StringBuilder,StringBuffer

2.StringBuilder底层:非常重要的两个属性

 

public static void main(String[] args) {
        // 创建StringBuilder
        StringBuilder sb =new StringBuilder();
        /**表面上调用空构造器,实际底层是对value数组进行初始化,长度为16
         * public StringBuilder() {
         *         super(16);
         *     }
         */

        StringBuilder sb1 =new StringBuilder(3);
        // 表面上调用StringBuilder的有参构造器,传入一个int类型的数,实际底层就是对value数组进行初始化,长度为你传入的数字

        StringBuilder sb3 =new StringBuilder("abc");
    }

理解可变和不可变的含义

        1.String -->  不可变

        String a ="abc";

                   a="abcdef"

                不可变:在地址不变的情况下,想把"abc"变成"abcdef"是不可能

        2.StringBuilder -->可变

                可变,在StringBuilder这个对象的地址不变的情况下,想把"abc"变成"abcdef"是可能的,直接追加即可

        StringBuilder sb= new StringBuilder();

        System.out.println(sb.append("abc")==sb.append("def")); // true

StringBuilder 常用方法

public static void main(String[] args) {
        // 创建StringBuilder
        StringBuilder sb = new StringBuilder("Hello World");
        // 增
        sb.append("你好世界");
        System.out.println(sb);

        // 删
        System.out.println(sb.delete(5, 11));//删除位置[3,11)上的字符
        sb.charAt(5);   // 删除位置5的字符
        System.out.println(sb);

        // 改 -->插入
        sb.insert(5,",");
        System.out.println(sb);

        // 改 -->替换
        sb.replace(0,5,"我好累");
        System.out.println(sb);

        sb.setCharAt(3,'!');
        System.out.println(sb);

        //查
        for (int i=0;i<sb.length();i++){
            System.out.print(sb.charAt(i) + "\t");
        }
        System.out.println();

        //首尾替换
        System.out.println(sb.reverse());

        // 截取
        System.out.println(sb.substring(4, 8));
    }

StringBuffer 常用方法

public static void main(String[] args) {
        // 创建StringBuilder
        StringBuffer sb = new StringBuffer("Hello World");
        // 增
        sb.append("你好世界");
        System.out.println(sb);

        // 删
        System.out.println(sb.delete(5, 11));//删除位置[3,11)上的字符
        sb.charAt(5);   // 删除位置5的字符
        System.out.println(sb);

        // 改 -->插入
        sb.insert(5,",");
        System.out.println(sb);

        // 改 -->替换
        sb.replace(0,5,"我好累");
        System.out.println(sb);

        sb.setCharAt(3,'!');
        System.out.println(sb);

        //查
        for (int i=0;i<sb.length();i++){
            System.out.print(sb.charAt(i) + "\t");
        }
        System.out.println();

        //首尾替换
        System.out.println(sb.reverse());

        // 截取
        System.out.println(sb.substring(4, 8));
    }

String,StringBuffer,StringBuilder的区别与练习

1.String 类是不可变类,即一旦一个String对象被创建后,包含在这个对象中的字符序列是不可改变的,直至这个对象销毁.

2.StringBuffer类则代表一个字符序列可变的字符串,可以通过append,insert,reverse,setCharAt,setLength等方法改变其内容.一旦生成了最终的字符串,调用toString方法将其转变为String

3.JDK1.5新增了一个StringBuilder类,与StringBuffer相似,构造方法与方法基本相同.不同的是StringBuilder是线程安全的,而StringBuilder是线程不安全的,所以性能略高.通常情况下,创建一个内容可变的字符串,应该优先考虑使用StringBuilder

StringBuilder :JDK1.5 效率高 线程不安全

StringBuffer :JDK1.0 效率低 线程安全

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值